【问题标题】:Draw a line between one particular pixel and a number of other pixels在一个特定像素和许多其他像素之间画一条线
【发布时间】:2013-11-26 19:31:28
【问题描述】:

我有一个黑色背景的黑白图像,其中包含许多白色像素(如夜空中的星星)。首先,选择其中一个像素,并将其坐标保存在名为 FirstPixel1*2 矩阵中。然后,所有其他像素被一一选择。 RowsCols 是两个 1*numel(find(pic)) 矩阵,分别包含这些像素的 X 和 Y 坐标。
我想在第一个选择的像素和所有其他像素之间画一条线,这看起来像是从原点 FirstPixel 发出的光束。

我已经使用plot 编写了一些代码……但答案非常错误! 像这样:

pic = imread( 'interest points' );
figure, imshow ( pic );
hold on
plot([Rows (1,:)'  Cols (1,:)'],[FirstPixel (1,1)'  FirstPixel (1,2)'], 'r-');

有什么帮助吗?!

提前致谢:)

【问题讨论】:

    标签: matlab image-processing plot


    【解决方案1】:

    'plot' 的两个参数是 X 和 Y 值,而不是你所做的第一点和第二点。你还需要给 numel 次你的 firstpixel,试试这个:

    NUMEL = numel(find(pic));
    hold on
    plot([Rows; ones(1,NUMEL)*FirstPixel(1)],[Cols; ones(1,NUMEL)*FirstPixel(2)],'-k');
    

    【讨论】:

    • 这个答案让我很困惑,直到我发现问题中的Rows 实际上是指 X 坐标(我个人觉得有点倒退)。现在我明白了。谢谢。
    【解决方案2】:

    Rows 代表问题中的 x 坐标(而 Cols 代表 y 坐标)这一事实可能会使接受的答案有点混乱。

    除了提出新的答案之外,我不知道如何为未来的读者澄清这一点。

    这是一个模拟问题场景的完整代码示例,但rows 代表 y 坐标,cols 代表 x 坐标。

    % replicate scenario (using 4 points)
    I = uint8(zeros(256, 256));
    I(124, 115) = 255;
    I(139, 165) = 255;
    I(12, 185) = 255;
    I(124, 185) = 255;
    
    n = numel(find(I));
    [rows, cols] = ind2sub(size(I), find(I));
    rows = rows';
    cols = cols';
    pixels = [rows; cols]';
    firstPixel = pixels(1,:);
    
    % show image and plot overlay
    imshow(I);
    hold on;
    plot([cols; ones(1,n)*firstPixel(2)], [rows; ones(1,n)*firstPixel(1)], '-r');
    

    这是结果图。

    我希望这对以后遇到此问题的访问者有所帮助。

    【讨论】:

    • 是的@mags,实际上我确实对代码进行了此更改以使其适用于我的情况......我不向未来的读者指出它是我的坏事。感谢您的澄清:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2011-09-10
    • 2021-01-05
    • 1970-01-01
    相关资源
    最近更新 更多