『壹』 最近在做圖像處理的程序時候找到一個圖片縮放的演算法,但是演算法的注釋太少,看不懂,在這里貼出來,求解釋。
別浪費時間啦,有時間在這里問問題,還不如多逛逛 博客園 或者 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 快捷鍵自己填 寫縮放像素,下面可以勾選你要縮放項,