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

Matlab 在一个特定像素和许多其他像素之间画一条线,matlab,image-processing,plot,Matlab,Image Processing,Plot,我有一张bw图像,背景是黑色的,包含许多白色像素(就像夜空中的星星)。首先,选择其中一个像素,并将其坐标保存在名为FirstPixel的1*2矩阵中。然后,逐个选择所有其他像素行和列是两个1*numel(查找(pic))矩阵,分别包含这些像素的X和Y坐标。 我想在第一个选择的像素和所有其他像素之间画一条线,它看起来像是从原点发射的光束 我用plot写了一些代码,但答案大错特错! 像这样: pic = imread( 'interest points' ); figure, imshow ( pi

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

我用
plot
写了一些代码,但答案大错特错! 像这样:

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


提前感谢:)

绘图的两个参数是X和Y值,而不是像您那样的第一点和第二点。您还需要为第一个像素提供numel时间,请尝试以下方法:

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

“plot”的两个参数是X和Y值,而不是像您所做的那样的第一点和第二点。您还需要为第一个像素提供numel时间,请尝试以下方法:

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

表示问题中的x坐标(以及
Cols
y坐标)这一事实可能会使公认的答案有点混乱

我不知道如何为未来的读者澄清这一点,而只是给出一个新的答案

下面是一个完整的代码示例,它模拟了问题中的场景,但是
表示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');
下面是结果图


我希望这能帮助将来有这个问题的访问者。

事实上,
代表问题中的x坐标(以及
Cols
y坐标),这会让公认的答案有点混乱

我不知道如何为未来的读者澄清这一点,而只是给出一个新的答案

下面是一个完整的代码示例,它模拟了问题中的场景,但是
表示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');
下面是结果图


我希望这能帮助将来有这个问题的访问者。

这个答案让我很困惑,直到我发现问题中的
实际上指的是X坐标(我个人觉得有点倒退)。现在我明白了。谢谢。这个答案让我很困惑,直到我发现问题中的
实际上指的是X坐标(我个人觉得有点倒退)。现在我明白了。谢谢。是的@mags,实际上我对代码做了这个修改,使它在我的情况下工作。。。我不好,没有向未来的读者指出这一点。谢谢你的澄清:)是的@mags,实际上我对代码做了这样的修改,使它在我的情况下工作。。。我不好,没有向未来的读者指出这一点。感谢您的澄清:)