跟踪连接像素
问题描述:
我想跟踪图像的所有连接像素。我使用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);
我用这个在以前的版本我的程序代码,它会unfortuantely检测所有的形状,即使他们没有连接,而不是一个接一个,现在我一直在尝试opencv,并想知道是否有一个函数或实现这样做,甚至可以使用非opencv实现或示例?什么是这个目的的简单算法?
答
一个好的开始是关于Flood Fill的维基百科文章。这具有填充算法的动画。
[您没有要求更正您的程序。]
+0
算法现在工作,我已经改变了这个代码中不可用的初始化值,它给了我错误,现在它是固定的。 – 2012-07-07 17:54:27
+0
我怀疑你的算法是洪水填充。如果是这样你可以投票回答 – 2012-07-08 09:17:29
Google提取连接的组件。 – krzych 2012-07-06 21:22:46