我想要拍摄RGB图像,找到图像中白色的点,然后获取图像中这些点的笛卡尔坐标。我大部分都在那里,但是当我尝试绘制笛卡尔坐标时,我得到一个垂直平铺的图像(即我应该看到的5个重叠副本)。任何人都知道可能导致这种情况的原因吗?
,
代码:(JPG以2448 x x3264 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
答案 0 :(得分: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));
这是我在进行预处理后得到的图像:
一旦我这样做并更改了meshgrid
来电,我就明白了: