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

时间:2015-10-29 16:33:33

标签: image matlab image-processing

我想要拍摄RGB图像,找到图像中白色的点,然后获取图像中这些点的笛卡尔坐标。我大部分都在那里,但是当我尝试绘制笛卡尔坐标时,我得到一个垂直平铺的图像(即我应该看到的5个重叠副本)。任何人都知道可能导致这种情况的原因吗?

Starting ImageFinal Image

代码:(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

1 个答案:

答案 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));

这是我在进行预处理后得到的图像:

enter image description here

一旦我这样做并更改了meshgrid来电,我就明白了:

enter image description here