【问题标题】:Tracing Connected Pixels追踪连接的像素
【发布时间】:2012-07-07 07:17:09
【问题描述】:

我想跟踪图像的所有连接像素。我使用 canny 算法进行边缘检测,现在需要获取每个独特的形状。

这是我的以下代码

x_axis = marker_i;   // x & y co-ordinates of the first detected pixels
y_axis = marker_j;

do
{

for (int i=0;i<8;i++){

if(i==0){x_axis = x_axis-1;  y_axis = y_axis-1;}  // each iteration checks one 
if(i==1){x_axis = x_axis;    y_axis = y_axis+1;}  // of the 8 adjacent pixels 
if(i==2){x_axis = x_axis;    y_axis = y_axis+1;}  // for a match 
if(i==3){x_axis = x_axis+1;  y_axis = y_axis-2;}
if(i==4){x_axis = x_axis;    y_axis = y_axis+2;}
if(i==5){x_axis = x_axis+1;  y_axis = y_axis-2;}
if(i==6){x_axis = x_axis;    y_axis = y_axis+1;}
if(i==7){x_axis = x_axis;    y_axis = y_axis+1;}

if(x_axis >= 1024 || y_axis >= 1280){ x_axis = 0; y_axis = 0;}

if(ch_rd == red [x_axis][y_axis] && ch_gr == green[x_axis][y_axis] 
&& ch_bl == blue[x_axis][y_axis] && pixel_comp[x_axis][y_axis]==0){ 

map++;
pixel_comp[x_axis][y_axis] = 2;                  // marks that pixel as read
pixal[num][0]    = x_axis;
pixal[num][1]    = y_axis;

if (map == 1){ curs[0] = x_axis; curs[1] = y_axis;}
if (map >  1){ div[est] = num; est++;}   // if there is more than one detection
num++;                                   // adds remaining to an array div

}

}

if(map==0){ 
x_axis = pixal[div[prev]][0]; y_axis = pixal[div[prev]][1]; prev++; 
    // if nothing is detected goes to the last item from array div
}
else{ 
x_axis = curs[0]; y_axis = curs[1]; 
} 
if(map==0 && prev>=est){ dead_end = 1;}
map = 0;
}
while (dead_end==0);

我在我的程序的以前版本中使用它,它会不幸地检测到所有形状,即使它们没有连接而不是一个一个连接,现在我一直在尝试 opencv,想知道是否有函数或实现我可以使用哪个甚至是非opencv实现或示例?为此目的的简单算法是什么?

【问题讨论】:

  • 谷歌提取连接组件。

标签: c++ c image-processing opencv


【解决方案1】:

一个好的起点是Flood Fill 上的维基百科文章。这有填充算法的动画。

[你没有要求更正你的程序。]

【讨论】:

  • 算法现在可以工作,我更改了此代码中不可用的初始化值,它给了我错误,现在它已修复。
  • 我怀疑你的算法是洪水填充。如果是这样,你可以投票这个答案
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2012-10-04
  • 1970-01-01
  • 2013-08-12
  • 2019-01-12
  • 1970-01-01
相关资源
最近更新 更多