要实现图像旋转,可是同时也变大了,没辙了。请教高手。

2019-07-17 14:02发布

这个代码运行后,图像时旋转了可是图像也变大了,被分成了四部分,有那个高手帮忙改一下程序,谢谢!!!!
% 两维图像旋转以及双线性灰度差值算法的实现
im_init = imread('E:医学图像配准Sources for Image Processinglake.bmp');im_init = double(im_init);im_height = size(im_init,1);im_width = size(im_init,2);% 分别处理灰度图像和RGB图像if ndims(im_init) == 3    im_final = zeros(im_height,im_width,3);    R = im_init(:,:,1);    G = im_init(:,:,2);    B = im_init(:,:,3);    R_final = im_final(:,:,1);    G_final = im_final(:,:,2);    B_final = im_final(:,:,3);else    im_final = zeros(im_height,im_width);end% rot_matrix = input('输入旋转矩阵,大小为2*2');rot_matrix = [cos(pi/4) -sin(pi/4);sin(pi/4) cos(pi/4)];for h = 1:im_height    for w = 1:im_width        % 平移至原点,旋转,然后再平移回去        new_position = rot_matrix*[h - im_height/2;w - im_width/2] + [im_height;im_width];        new_position(1) = mod(new_position(1),im_height);        new_position(2) = mod(new_position(2),im_width);        if new_position(1) == 0            new_position(1) = 1;        end        if new_position(2) == 0            new_position(2) = 1;        end        % 如果新位置为整数,那么直接赋予灰度值或者RGB值,否则,按照双线性插值计算,使用后向映射        if new_position == round(new_position)            if ndims(im_init) == 3                R_final(h,w) = R(new_position(1),new_position(2));                G_final(h,w) = G(new_position(1),new_position(2));                B_final(h,w) = B(new_position(1),new_position(2));            else                im_final(h,w) = im_init(new_position(1),new_position(2));            end        else            h_new = floor(new_position(1));            w_new = floor(new_position(2));            if h_new == 0                h_new = 1;            end            if w_new == 0                w_new = 1;            end            if ndims(im_init) == 3                % 双线性插值的实现过程                 R_temp1 = R(h_new + 1,w_new)*(new_position(1) - h_new) + R(h_new,w_new)*(h_new + 1 - new_position(1));                R_temp2 = R(h_new + 1,w_new + 1)*(new_position(1) - h_new) + R(h_new,w_new + 1)*(h_new + 1 - new_position(1));                R_final(h,w) = R_temp1*(w_new + 1 - new_position(2)) + R_temp2*(new_position(2) - w_new);                G_temp1 = G(h_new + 1,w_new)*(new_position(1) - h_new) + G(h_new,w_new)*(h_new + 1 - new_position(1));                G_temp2 = G(h_new + 1,w_new + 1)*(new_position(1) - h_new) + G(h_new,w_new + 1)*(h_new + 1 - new_position(1));                G_final(h,w) = G_temp1*(w_new + 1 - new_position(2)) + G_temp2*(new_position(2) - w_new);                B_temp1 = B(h_new + 1,w_new)*(new_position(1) - h_new) + B(h_new,w_new)*(h_new + 1 - new_position(1));                B_temp2 = B(h_new + 1,w_new + 1)*(new_position(1) - h_new) + B(h_new,w_new + 1)*(h_new + 1 - new_position(1));                B_final(h,w) = B_temp1*(w_new + 1 - new_position(2)) + B_temp2*(new_position(2) - w_new);            else                gray_temp1 = im_init(h_new + 1,w_new)*(new_position(1) - h_new) + im_init(h_new,w_new)*(h_new + 1 - new_position(1));                gray_temp2 = im_init(h_new + 1,w_new + 1)*(new_position(1) - h_new) + im_init(h_new,w_new + 1)*(h_new + 1 - new_position(1));                im_final(h,w) = gray_temp1*(w_new + 1 - new_position(2)) + gray_temp2*(new_position(2) - w_new);            end        end    endendif ndims(im_init) == 3    im_final(:,:,1) = R_final;    im_final(:,:,2) = G_final;    im_final(:,:,3) = B_final;else    im_final = im2uint8(mat2gray(im_final));endfigure(1)imshow(im2uint8(mat2gray(im_init)));title('原始图像')figure(2)imshow(uint8(im_final))title('旋转图像')
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。