我的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-');
任何帮助?!
提前致谢:)
答案 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');
以下是结果图。
我希望这有助于解决此问题的未来访问者。