2017-03-02 133 views
0

我有图像:如何放大图像中的特定位置?

img = [1 1 1 3 3 3 3 3 3; 
     1 1 1 3 3 3 3 3 3; 
     1 1 1 3 3 3 3 3 3; 
     1 1 2 3 3 3 3 3 3; 
     1 1 2 2 2 2 2 1 1; 
     1 2 2 2 2 2 1 1 1; 
     1 2 2 2 2 1 1 1 1]; 

假设我很感兴趣,看到周围的特定位置更精细的细节有:

Indx = [18; 47]; 
坐标

rows = [4; 5] and cols = [3; 7] 

我明白“zoom on/off”允许一个通过按下鼠标按键交互缩放。然而,不是这种手动方法,有没有一种方法可以通过编程的方式让matlab缩放 - 比如这些位置的3x3 neighbourhood(或更多)?每当调用‘imshow’

我需要帮助/建议/建议。非常感谢预期。

回答

0

这可能是一种“矫枉过正”,但您可以使用imwarp功能:

imwarp允许与位移(及以上)缩放。

假设:

  • (center_x, center_y)是你的兴趣点。
  • 输出图像(缩放后)与输入图像大小相同。
  • 兴趣点应位于缩放后图像的中心。

我在测试感兴趣的点绘制了一个十字。
我使用'peppers.png'图像进行演示。

这里是我的代码示例:

I = imread('peppers.png'); 
w = size(I, 2); %Image width 
h = size(I, 1); %Image height 

zoom = 4; %Zoom factor x4 

%Point of interest. 
center_x = w/2 - 80; 
center_y = h/2 - 50; 

%Draw center cross for testing (thickness is 2 pixels): 
I(center_y-1:center_y, center_x-5:center_x+4, :) = 255; 
I(center_y-5:center_y+4, center_x-1:center_x, :) = 255; 

figure;imshow(I); 

%Compute displacement: 
x0 = w/2 - zoom*center_x; 
y0 = h/2 - zoom*center_y; 

%Build transformation matrix T. 
T = [zoom 0  0; ... 
    0  zoom 0; ... 
    x0  y0  1]; 

tform = affine2d(T); %Needed by imwarp 

%J = imwarp(I, tform, 'OutputView', imref2d(size(I)), 'Interp', 'nearest'); %Select nearest interpolation. 

%Apply transformation (dimensions of J will be the same as I). 
J = imwarp(I, tform, 'OutputView', imref2d(size(I)), 'Interp', 'cubic'); %Select cubic interpolation. 
figure;imshow(J); 

输入图像(注意小十字):
enter image description here

输出图像:
enter image description here

+0

它的工作原理很正确的,我我会尽力适应这种情况。非常感谢。 – gary105

0

有一块code它给你点你点的像素位置。可以有效地使用此代码:

function [loc] = get_image_point (I) 

figure('name','Doubleclick to set location');imshow(I); 
[c r] = getpts(1); 
loc = int32([c r]); 
if size(loc)>1 
    loc = [loc(1,1) loc(1,2)]; 
end 
close all; 
end 

有了这样的像素位置,你可以创建一个指定尺寸的身材,让说你双击像素位置image(x,y)。然后,你可以简单地说figure('Position', [0 0 screenWidth screenHeight]), imshow(image(x-x1:x+x1, y-y1:y+y1))。确保x+-x1y+-y1在该范围内。