2013-08-02 124 views
0

在图像中连接特定像素我有一个martrix,A代表一个640×480的图像,并且包含一些指标如所示的另一矩阵index_matrix:通过边缘Matlab的

[1 639; 
212 210; 
213 208; 
214 209; 
215 211; 
216 210; 
217 211]; 

第一栏是对应于martix行索引A和第二列对应于矩阵A中的列索引,因此index_matrix中的每一行代表马蒂克斯A中的一个像素的索引,例如,上述index_matrix示例中的第一行表示位于row_1中的像素的索引col_639。所以我只想连接在index_matrix中找到的martix A的点,其中这些点的每个点将连接到index_matrix中最近的两个其他点。这就像在这些点之间构建树或图。使得连接两个点的该图的边缘应当绘制在具有大于零的值的像素上,因此如果值等于零的像素处于边缘路径中,则将不会构建连接两个点的边缘,并且两个点将不会连接。 因此,如fig所示,如果像素A,B和C的索引位于index_matrix中,并且A和B将被连接,则B和C将被连接,而A和C将不会被连接,因为在构建边的路径时将通过一个零值像素“盘旋”。所以我问是否有人可以请告知我该怎么做?

+0

你想在你的例子中的红线“中断”的零像素,或根本没有绘制? – Floris

+0

@弗洛里斯只是为了澄清这些值是像素值。我不知道你是什么意思的“打断”,但是如果在构建边缘路径时发现零像素,这个边缘将不会被绘制 – Tak

+0

@弗洛伊斯我想知道你是否有任何建议吗? – Tak

回答

1

使用plot命令在图像上的两个点之间绘制一条线。你可以做的是存储原始图像(例如,I),并继续在另一个图像上绘图(例如,C)。

假设我们从第二点(212,210)开始。那么我们需要两条线,(212,210) - (1,639)(212,210) - (213,208)。我们来看第一行。

您既可以计算两点之间的线段上的离散点,也可以使用plot函数在空白图像上绘制它,如M = zeros(size(I));。现在,M(对于蒙版)将只有白色像素,该线将被绘制。

然后,可以使它一个逻辑掩模(M == 255)和检查是否存在原始图像I中对应于true像素M任何零。

UPDATE:由于使用掩模每次都是有点跛,并利用直线方程和离散化的方法不画线的最佳方式,我会建议使用bresenham函数来获取线段上的点列表。你可以很容易地检查这些值,并决定保留线路,而不会弄脏掩码。

+0

感谢您的回答!其实我不仅要在前一个和后一个之间划一条线,而且要在每个其他点之间划一条线,例如在我的例子中,我将尝试在(1,639)和所有其他6个像素之间划一条线。是否可以尝试脚本来做到这一点,因为我对绘图不是很熟悉,我非常感谢!很多谢谢 – Tak

+1

是的,你只需要每次使用一个新的面具来检查沿线的点。我会建议看看我使用'bresenham'的更新答案。请注意,它需要从MATLAB中央下载。 – Jacob