【數字圖像處理】MATLAB實現圖像縮小的兩種算法

圖像形狀變換——圖像縮小的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);

代碼執行結果:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章