a 2D version
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
1.2 KiB

3 years ago
function ZI = imageZoom( I,zmf )
%----------------------˫���Բ�ֵ�����ž�����ͼ��---------------------------
% Input��
% I��ͼ���ļ���������������ֵ��0~255����
% zmf���������ӣ������ŵı���
% Output��
% ���ź���ͼ������ ZI
%-------------------------------------------------------------------
%% Step2 ͨ��ԭʼͼ�����������ӵõ���ͼ���Ĵ�С����������ͼ����
[IH,IW] = size(I);
ZIH = round(IH*zmf); % �������ź���ͼ���߶ȣ�����ȡ��
ZIW = round(IW*zmf); % �������ź���ͼ�����ȣ�����ȡ��
ZI = zeros(ZIH,ZIW); % ������ͼ��
%% Step3 ��չ����I��Ե
IT = zeros(IH+2,IW+2);
IT(2:IH+1,2:IW+1,:) = I;
IT(1,2:IW+1,:)=I(1,:,:);IT(IH+2,2:IW+1,:)=I(IH,:,:);
IT(2:IH+1,1,:)=I(:,1,:);IT(2:IH+1,IW+2,:)=I(:,IW,:);
IT(1,1,:) = I(1,1,:);IT(1,IW+2,:) = I(1,IW,:);
IT(IH+2,1,:) = I(IH,1,:);IT(IH+2,IW+2,:) = I(IH,IW,:);
%% Step4 ����ͼ����ij�����أ�zi��zj��ӳ�䵽ԭʼͼ��(ii��jj)��������ֵ��
for zj = 1:ZIW % ��ͼ�����а�����Ԫ��ɨ��
for zi = 1:ZIH
ii = (zi-1)/zmf; jj = (zj-1)/zmf;
i = floor(ii); j = floor(jj); % ����ȡ��
u = ii - i; v = jj - j;
i = i + 1; j = j + 1;
ZI(zi,zj,:) = (1-u)*(1-v)*IT(i,j,:) +(1-u)*v*IT(i,j+1,:)...
+ u*(1-v)*IT(i+1,j,:) +u*v*IT(i+1,j+1,:);
end
end
% ZI = uint8(ZI);
end