如何从MATLAB函数ginput获取实际像素索引?

时间:2018-06-27 14:36:58

标签: image matlab

我正在使用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;

我的问题:

我发现输出xy不是整数,因此它们不代表像素索引。

有时,这两个条件max(x) > widthmax(y) > height都得到满足。似乎表明我用ginput标记的4个点在图像之外(但实际上不是)。

我知道此问题与图像坐标系设置有关,但是我仍然不确定如何将从x函数获得的yginput转换为实际像素索引? 谢谢。

1 个答案:

答案 0 :(得分:0)

下面的代码显示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);