圖像形狀變換——圖像縮小的MATLAB實現
代碼實現
1)基於像素採樣的圖像縮小方法:
% function [im] = resize(I,kr,kc)
% I = imread('img\han.jpg');
% [im1] = dip(I,0.3,0.5);
function [im] = dip(I,kr,kc)
[m,n,d] = size(I); % 得到原始圖像尺寸
m2 = round(kr*m); % round函數:四捨五入
n2 = round(kc*n); % 得到新圖像尺寸:m2 n2
c1 = 1/kr; c2 = 1/kc;
J = zeros(m2,n2,d); % 初始化新圖像矩陣J
for i=1:m2
for j=1:n2
% 計算新圖對應原圖的x,y座標--縮小
x = round(c1*i);
y = round(c2*j);
% 檢查對應座標邊界條件
if x>m
x = m;
end
if y>n
y = n;
end
if x<1
x = 1;
end
if y<1
y = 1;
end
J(i,j,:) = I(x,y,:);
end
end
im = uint8(J);
figure,imshow(I);title('原圖');
figure,imshow(im);title('基於像素採樣縮小後的圖像');
end
2)基於局部均值的圖像縮小方法:
% function [im] = resize(I,kr,kc)
% I = imread('img\han.jpg');
% [im] = dip(I,0.3,0.5);
function [im] = dip(I,kr,kc)
[m,n,d] = size(I); % 得到原始圖像尺寸
m2 = round(kr*m);
n2 = round(kc*n); % 得到新圖像尺寸:m2 n2
J = zeros(m2,n2,d); % 初始化新圖像矩陣J
a = 1/kr; b=1/kc; % 採樣間隔
for i=1:m2
for j=1:n2
% 計算新圖對應原圖的x,y座標
x1 = round(a*(i-1)+1); % 起始行
x2 = round(a*i); % 結束行
% 檢查對應座標邊界條件
if x2>m
x2 = m;
end
y1 = round(b*(j-1)+1); % 起始行
y2 = round(b*j); % 結束行
if y2>n
y2 = n;
end
F = I(x1:x2,y1:y2,:);
% 彩色圖像--對每個顏色通道分別求均值
if(d>1)
J(i,j,1) = mean(mean(F(:,:,1))); % mean:數組的均值
J(i,j,2) = mean(mean(F(:,:,2)));
J(i,j,3) = mean(mean(F(:,:,3)));
else
J(i,j,1) = mean(mean(F(:,:,1))); % 灰度圖
end
end
end
im = uint8(J);
figure,imshow(I);title('原圖');
figure,imshow(im);title('基於局部均值縮小後的圖像');
end
命令行窗口輸入如下代碼:
I = imread('img\han.jpg');
[im1] = dip(I,0.3,0.5);
代碼執行結果: