Как получить фактические индексы пикселей из функции MATLAB ginput? - PullRequest
0 голосов
/ 27 июня 2018

Я использую функцию MATLAB ginput , чтобы пометить данные моего изображения для дальнейшей обработки. Вот мой код:

file_name = "test.jpg";

% Read the image
img = imread(file_name);

% Get the image dimension
imgInfo = imfinfo(file_name);
width = imgInfo.Width;
height = imgInfo.Height;

% Using ginput function to label the image
figure(1);
imshow(img);
hold on;
[x, y] = ginput(4); % Manually label 4 points
scatter(x, y, 100, 'ro', 'filled'); % Plot the marked points on img
hold off;

Моя проблема:

Я обнаружил, что выходные данные x и y не являются целыми числами, поэтому они не представляют индексы пикселей.

Иногда эти два условия max(x) > width и max(y) > height выполняются. Кажется, можно предположить, что 4 точки, которые я пометил с помощью ginput, находятся за пределами изображения (но на самом деле это не так).

Мне известно, что эта проблема связана с настройкой системы координат изображения, но я все еще не уверен, как преобразовать x и y, полученные из функции ginput, в фактические индексы пикселей? Спасибо.

1 Ответ

0 голосов
/ 27 июня 2018

Приведенный ниже код показывает изображение 2x2, увеличивает оси, чтобы мы могли его видеть, а затем включает метки осей и метки. Это позволяет вам видеть систему координат, используемую для визуализации изображений в объекте осей.

imshow([255,0;0,255])
set(gca,'position',[0.2,0.2,0.6,0.6])
axis on

enter image description here

Координаты, возвращаемые ginput, соответствуют этим координатам.

Короче говоря, вам нужно просто округлить координаты, возвращаемые ginput, чтобы получить индексы на изображении:

[x, y] = ginput(4); % Manually label 4 points
x = round(x);
y = round(y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...