Как мне увеличить определенные места на изображении?

У меня есть изображение:

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’ называется?

Пожалуйста, мне нужна помощь / совет / предложения по этому вопросу. Большое спасибо в ожидании.

2 ответа

Решение

Это может быть "перебор", но вы можете использовать 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);

Входное изображение (обратите внимание на маленький крестик):

Выходное изображение:

Существует фрагмент кода, который дает вам пиксельное местоположение точки, по которой вы щелкнули. Вы можете эффективно использовать этот код:

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

Имея такое положение пикселя, вы можете создать фигуру с указанными размерами, скажем, дважды щелкнуть позицию пикселя (x,y) в image, Тогда вы можете просто сказать figure('Position', [0 0 screenWidth screenHeight]), imshow(image(x-x1:x+x1, y-y1:y+y1)), Удостоверься что x+-x1 а также y+-y1 находятся в пределах досягаемости.

Другие вопросы по тегам