【问题标题】:Image Repetition from Binary to Cartesian从二进制到笛卡尔的图像重复
【发布时间】:2015-10-30 00:49:15
【问题描述】:

我想获取一张 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

【问题讨论】:

    标签: image matlab image-processing


    【解决方案1】:

    非常简单。您声明您的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 呼叫,我就会明白:

    【讨论】:

    • 抱歉,白色边框是在将 Matlab 图形保存为 jpg 时出现的。感谢您的回答!
    • @lg22woo 我想 :) 当您在 MATLAB 中本地保存图形时会发生这种情况。顺便说一句,我建议您在 MATLAB FileExchange 上使用 export_fig 工具。将数字保存到磁盘的更好方法:mathworks.com/matlabcentral/fileexchange/23629-export-fig - 我已经使用了很多年了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2012-02-24
    • 2011-09-18
    • 2016-06-26
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多