如何在一个子图中显示图像的zomming(图上放大镜)

时间:2016-03-08 12:46:21

标签: matlab matlab-figure

我有一张图片。我想在图像中显示放大区域。

例如,我有两个有趣的区域(ROI):红色和黄色区域。 "红色缩放图像"应显示原始图像的上方和黄色缩放图像"应显示在原始图像的下方。

为了在一个子图中显示它们,我将三个图像(两个缩放图像和原始图像)组合成一个行图像。组合图像应显示在子图中。下图显示了我的期望。我的问题是这些缩放图像无法放大组合图像的第一行和最后一行。你能帮帮我吗?这就是我试过的

 Img = imread('peppers.png');
 Img=rgb2gray(Img);
 Img=double(Img);
 Img=imresize(Img,[256 256]);
 %%Draw rectangle
 red_rect=[100 50 20 20];
 yellow_rect=[200 100 20 20];
 %% zoom in image
 red_Img_zoomIn=Img(red_rect(2) : (red_rect(2)+red_rect(4)) , red_rect(1) : (red_rect(1)+red_rect(3)) , :);
 yellow_Img_zoomIn=Img(yellow_rect(2) : (yellow_rect(2)+yellow_rect(4)) , yellow_rect(1) : (yellow_rect(1)+yellow_rect(3)) , :);
startrow = 30;
startcol = 30;
Img_zoom1=zeros(size(Img));
red_Img_zoomIn_original=red_Img_zoomIn;
red_Img_zoomIn=imresize(red_Img_zoomIn,10);
Img_zoom1(startrow:startrow+size(red_Img_zoomIn,1)-1,startcol:startcol+size(red_Img_zoomIn,2)-1) = red_Img_zoomIn;
Img_combined=[Img_zoom1;Img;zeros(size(Img))];
 %% Adding zooming images in Img_combined-centering
figure(1);
set(gcf,'color','w');
subplot(121);imshow(Img_combined,[]);
subplot(122);imshow(red_Img_zoomIn_original,[]);

这是我的预期结果。

enter image description here

1 个答案:

答案 0 :(得分:2)

缩放的问题是插值方法。如果你没有指定,imresize将使用双线性插值,有效地“模糊”你的图像。

为避免这种情况,请明确指定所需的方法,最近邻居,复制最近像素值的方法。请注意,还有一种方法可以告诉imresize输出图像所需的行和列的确切数量,而不仅仅是一个比例。

如果您将这段代码添加到您的代码中:

 red_Img_zoomIn=Img(red_rect(2) : (red_rect(2)+red_rect(4)) , red_rect(1) : (red_rect(1)+red_rect(3)) , :);
 yellow_Img_zoomIn=Img(yellow_rect(2) : (yellow_rect(2)+yellow_rect(4)) , yellow_rect(1) : (yellow_rect(1)+yellow_rect(3)) , :);

 % We need to rezise the pieces of the image if they want to be seen "big"


 % lets use nearest neighbour interpolation to make sure new pixel are just "repeated values"
red_Img_zoomOut=imresize(red_Img_zoomIn,'OutputSize',[size(Img,1) size(Img,2)],'Method','nearest');
yellow_Img_zoomOut=imresize(yellow_Img_zoomIn,'OutputSize',[size(Img,1) size(Img,2)],'Method',  'nearest');



% Combine images
 Img_combined=[red_Img_zoomOut;
      Img;
     yellow_Img_zoomOut];
 %% Adding zooming images in Img_combined-centering
 figure(1);
 set(gcf,'color','w');
imshow(Img_combined);

输出将不会模糊:

enter image description here