通过Matlab边缘连接图像中的某些像素

时间:2013-08-02 18:43:55

标签: matlab image-processing

我有一个表示640x480图像的martrix A和另一个包含一些索引的矩阵index_matrix:

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

第一个col对应于martix A中的行索引,第二个col对应于矩阵A中的col索引,因此index_matrix中的每一行代表martix 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将不连接,因为在构造路径时边缘将通过“圈出”的零值像素。所以我问是否有人可以请你告诉我该怎么做?

1 个答案:

答案 0 :(得分: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用于获取线段上的点列表。您可以轻松地检查值并决定是否保持线条而不会弄乱面具。