在一个特定像素和许多其他像素之间画一条线

时间:2013-11-25 22:03:56

标签: matlab image-processing plot

我的bw图像有黑色背景,包含许多白色像素(如夜空中的星星)。首先,选择其中一个像素,并将其坐标保存在名为 FirstPixel 1 * 2 矩阵中。然后,所有其他像素被逐一选择。 Cols 是两个 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-');

任何帮助?!

提前致谢:)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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');

以下是结果图。

lines_between_points

我希望这有助于解决此问题的未来访问者。