完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这个代码运行后,图像时旋转了可是图像也变大了,被分成了四部分,有那个高手帮忙改一下程序,谢谢!!!! % 两维图像旋转以及双线性灰度差值算法的实现 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 end end if 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)); end figure(1) imshow(im2uint8(mat2gray(im_init))); title('原始图像') figure(2) imshow(uint8(im_final)) title('旋转图像') |
|
相关推荐
2个回答
|
|
感谢楼主分享啦
|
|
|
|
高手都去哪了?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
MATLAB(3)--矩阵的引用(sub2ind、ind2sub、reshape函数使用)
1726 浏览 0 评论
2076 浏览 0 评论
4055 浏览 1 评论
17957 浏览 0 评论
5077 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-20 21:52 , Processed in 0.495813 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号