‘壹’ 最近在做图像处理的程序时候找到一个图片缩放的算法,但是算法的注释太少,看不懂,在这里贴出来,求解释。
别浪费时间啦,有时间在这里问问题,还不如多逛逛 博客园 或者 CSDN,自己好好钻研一下吧!
‘贰’ MATLAB双线性插值法实现图像缩放问题求教
clear; %此题是用双线性插值法实现图像缩放
I=imread('f.jpg'); %读入原图像,只需将此处的文件换成要变换的图片即可
%图像属性
% Filename: 'f.jpg'
% FileModDate: '24-Aug-2008 16:50:30'
% FileSize: 20372
% Format: 'jpg'
% FormatVersion: ''
% Width: 480
% Height: 640
% BitDepth: 8
% ColorType: 'grayscale'
% FormatSignature: ''
% NumberOfSamples: 1
% CodingMethod: 'Huffman'
% CodingProcess: 'Sequential'
% Comment: {}
[rows,cols]=size(I);
K1 = str2double(inputdlg('请输入行缩放倍数', 'INPUT scale factor', 1, {'0.5'}));%行默认变为原来的0.5倍
K2 = str2double(inputdlg('请输入列缩放倍数', 'INPUT scale factor', 1, {'0.4'}));%列默认变为原来的0.4倍
width = K1 * rows;
height = K2 * cols;
Out = uint8(zeros(width,height)); %创建输出图像矩阵
widthScale = rows/width;
heightScale = cols/height;
for x = 6:width - 6 % 6是为了防止矩阵超出边界溢出
for y = 6:height - 6
oldX = x * widthScale; % oldX,oldY为原坐标,x,y为新坐标
oldY = y * heightScale;
if (oldX/double(uint16(oldX)) == 1.0) & (oldY/double(uint16(oldY)) == 1.0)
Out(x,y) = I(int16(oldX),int16(oldY));%若oldX,oldY为整数,直接赋值
else
a = double(uint16(oldX));
b = double(uint16(oldY));
x11 = double(I(a,b)); % x11 赋值为 I(a,b)
x12 = double(I(a,b+1)); % x12 赋值为 I(a,b+1)
x21 = double(I(a+1,b)); % x21 赋值为 I(a+1,b)
x22 = double(I(a+1,b+1)); % x22 赋值为 I(a+1,b+1)
Out(x,y) = uint8( (b+1-oldY) * ((oldX-a)*x21 + (a+1-oldX)*x11) + (oldY-b) * ((oldX-a)*x22 +(a+1-oldX) * x12) ); % 用双线性插值计算公式计算
end
end
end
imshow(I);
figure;
imshow(Out);
‘叁’ 照片扩大用什么插值法
无限放大图片的软件没有,毕竟无论软件的算法多么高级和智能,均无法创造出原本不存在的图像细节,但有的软件通过插值计算,可以避免马赛克出现,并且尽力使放大后的照片显得更加细腻、边缘更加圆滑。
建议网络下载个有人号称“放大几十倍不现马赛克”的“S-Spline”软件,里面有三种算法可以尝试选择,视觉效果哪种好就确定哪种好了。自己学着处理,不难,软件很直观,容易学的。具体介绍见:
‘肆’ opencv实现图像缩放插值是什么意思
‘伍’ 图像缩放技术中 立方卷积法和 双三次插值法是一样的吗
您好,请问您的问题解决了么?我也遇到了同样的困惑,现在还没有找到答案,如果您找到了答案,可否与大家交流一下呢,谢谢楼主!
‘陆’ ps中对图像的缩放使用的是什么算法
ps中对图像的缩放使用的是近邻取样插值(nearest neighbor interpolation)算法。书上是这么说的,其实一般人完全没有必要研究这些!
‘柒’ 高分求图像缩小算法
添加Image控件Image1
Private Sub Form_Load()
Image1.Stretch = True
Image1.Picture = LoadPicture("图片文件路径")
'任意设置image的大小,图片大小会相应伸缩
Image1.Width = 8000
Image1.Height = 6000
End Sub
VB中也没什么算法,说起来也就是
用image控件loadpicture之后,把image的Stretch属性设为True,那么图片也就随着image的缩小而缩小。(如果你要获得缩小后的图片,那就要用屏幕截图)
是不是要图片缩小的实现过程算法?这个我也不知道了,等别人来回答吧.
‘捌’ 图像缩放和旋转运算时,为什么需要插值
所有的图像缩放和旋转运算都是采用差值计算来实现的,包括其他的一些运算也是用查值的。
‘玖’ 数字图像处理 图像缩放以及旋转的算法代码
clearall;
I=imread('lena.bmp');
figure;imshow(I);title('原图像');
[m,n]=size(I);
%%%缩小临近法
M=0.5;%放大倍数
%新的图像大小
m1=m*M;n1=n*M;
%****************************************************
fori=1:m1
forj=1:n1;
J(i,j)=I(round(i/M),round(j/M));
end
end
%*****************************************************
figure;imshow(J);title('缩小图像');
%%%放大双线性插值法
I2=double(I);
N=1.5;%放大倍数
%新的图像大小
m2=m*N;n2=n*N;
J2=zeros(m2,n2);
fori=1:m2
forj=1:n2
x=i/N;
y=j/N;
u=floor(x);
v=floor(y);
a=x-u;
b=y-v;
ifu+2<=m&v+2<=n
J2(i,j)=I2(u+1,v+1)*(1-a)*(1-b)+I2(u+2,v+1)*a*(1-b)+I2(u+1,v+2)*(1-a)*b+I2(u+2,v+2)*a*b;
end
end
end
J2=uint8(J2);
figure;imshow(J2);title('放大图像');
%%%%%旋转
R=45*pi/180;%旋转角度
I=double(I);
%新图像大小
m2=ceil(m*cos(R)+n*sin(R));
n2=ceil(m*sin(R)+n*cos(R));
u0=m*sin(R);%平移量
%变换矩阵
T=[cos(R),sin(R);-sin(R),cos(R)];
L=zeros(m2,n2);
foru=1:n2
forv=1:m2
%新图像坐标变换到原图像坐标x和y中
temp=T*([u;v]-[u0;0]);
x=temp(1);
y=temp(2);
ifx>=1&x<=m&y>=1&y<=n%若变换出的x和y在原图像范围内
x_low=floor(x);
x_up=ceil(x);
y_low=floor(y);
y_up=ceil(y);
%双线性插值,p1到p4是(x,y)周围的四个点
p1=I(x_low,y_low);
p2=I(x_up,y_low);
p3=I(x_low,y_low);
p4=I(x_up,y_up);
s=x-x_low;
t=y-y_low;
L(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;
end
end
end
L=uint8(L);
figure;imshow(L);
‘拾’ ps中对图像的缩放使用的是什么算法
缩放,是按比例来的,你放大多少倍,图像就是按倍数来定的,比如你的像素宽是100素材,你要缩放到200就是一倍啊,貌似小学生都会的额,在里面ALT+CTRL+I 快捷键自己填 写缩放像素,下面可以勾选你要缩放项,