从二进制到笛卡尔的图像重复

4
我希望能够获取一张RGB图片,在图片中找出白色像素点,并获取这些点在图片中的笛卡尔坐标。我已经完成了大部分工作,但是当我尝试绘制笛卡尔坐标时,我得到的是一个竖向平铺的图像(即重叠了5个正常应该看到的图像)。有人知道可能是什么原因吗?
代码:(JPG格式的输入图片为2448 x 3264 x 3 uint8)
I = imread('IMG_0245.JPG');
imshow(I); % display unaltered image

% Convert image to grayscale
I = rgb2gray(I); 
% Convert image to binary (black/white)
I = im2bw(I, 0.9); 
% Generate cartesian coordinates of image
imageSize = size(I);
[x, y] = meshgrid( 1:imageSize(1), 1:imageSize(2) );
PerspectiveImage = [x(:), y(:), I(:)];

% Get indices of white points only
whiteIndices = find(PerspectiveImage(:,3));
figure; plot( PerspectiveImage(whiteIndices, 1), PerspectiveImage(whiteIndices, 2),'.');
% Flip vertically to correct indexing vs. plotting issue
axis ij
1个回答

4
非常简单。您声明meshgrid的方式不正确。应该是这样的:
[x, y] = meshgrid( 1:imageSize(2), 1:imageSize(1) );

第一个参数表示2D网格的水平范围,因此您需要使其变化为您拥有的列数。同样,第二个参数表示2D网格的垂直范围,因此您需要将其设置为您拥有的行数。
我不得不对您的图像进行预处理,以获得一些良好的结果,因为您的原始图像周围有大量的白色边框。我必须通过删除所有纯白色像素来删除此边框。我也直接从StackOverflow中读取了该图像。
I = imread('http://s7.postimg.org/ovb53w4ff/Track_example.jpg');
mask = all(I == 255, 3);
I = bsxfun(@times, I, uint8(~mask));

这是我在预处理后得到的图像: enter image description here 当我这样做并更改你的meshgrid调用时,我得到了这个: enter image description here

1
抱歉白边的问题 - 这是将Matlab图形保存为jpg格式时出现的结果。感谢您的回答! - lg22woo
@lg22woo 我明白了 :) 当你在MATLAB中本地保存图形时会出现这种情况。顺便说一句,我建议你使用MATLAB FileExchange上的export_fig工具。这是将图形保存到磁盘的更好方法:http://www.mathworks.com/matlabcentral/fileexchange/23629-export-fig - 我已经使用它多年了! - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接