📄 分水岭算法源码.txt
字号:
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)-xsize+1) == MASK && *(image_d+*(image_mask+l*xsize+k)-xsize+1) == 0)
{
*(image_d+*(image_mask+l*xsize+k)-xsize+1) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)-xsize+1;
}
}
}
//中上点
if(*(image_d+*(image_mask+l*xsize+k)-1)<Current_Dist && (*(image_out+*(image_mask+l*xsize+k)-1)>0 || *(image_out+*(image_mask+l*xsize+k)-1) == WSHED))
{
if(*(image_out+*(image_mask+l*xsize+k)-1) >0)
{
if(*(image_out+*(image_mask+l*xsize+k)) == MASK || *(image_out+*(image_mask+l*xsize+k)) == WSHED)
*(image_out+*(image_mask+l*xsize+k)) = *(image_out+*(image_mask+l*xsize+k)-1);
else
{
if(*(image_out+*(image_mask+l*xsize+k)) != *(image_out+*(image_mask+l*xsize+k)-1))
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)-1) == MASK && *(image_d+*(image_mask+l*xsize+k)-1) == 0)
{
*(image_d+*(image_mask+l*xsize+k)-1) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)-1;
}
}
}
//中下点
if(*(image_d+*(image_mask+l*xsize+k)+1)<Current_Dist && (*(image_out+*(image_mask+l*xsize+k)+1)>0 || *(image_out+*(image_mask+l*xsize+k)+1) == WSHED))
{
if(*(image_out+*(image_mask+l*xsize+k)+1) >0)
{
if(*(image_out+*(image_mask+l*xsize+k)) == MASK || *(image_out+*(image_mask+l*xsize+k)) == WSHED)
*(image_out+*(image_mask+l*xsize+k)) = *(image_out+*(image_mask+l*xsize+k)+1);
else
{
if(*(image_out+*(image_mask+l*xsize+k)) != *(image_out+*(image_mask+l*xsize+k)+1))
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)+1) == MASK && *(image_d+*(image_mask+l*xsize+k)+1) == 0)
{
*(image_d+*(image_mask+l*xsize+k)+1) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)+1;
}
}
}
//右上点
if(*(image_d+*(image_mask+l*xsize+k)+xsize-1)<Current_Dist && (*(image_out+*(image_mask+l*xsize+k)+xsize-1)>0 || *(image_out+*(image_mask+l*xsize+k)+xsize-1) == WSHED))
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize-1) >0)
{
if(*(image_out+*(image_mask+l*xsize+k)) == MASK || *(image_out+*(image_mask+l*xsize+k)) == WSHED)
*(image_out+*(image_mask+l*xsize+k)) = *(image_out+*(image_mask+l*xsize+k)+xsize-1);
else
{
if(*(image_out+*(image_mask+l*xsize+k)) != *(image_out+*(image_mask+l*xsize+k)+xsize-1))
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize-1) == MASK && *(image_d+*(image_mask+l*xsize+k)+xsize-1) == 0)
{
*(image_d+*(image_mask+l*xsize+k)+xsize-1) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)+xsize-1;
}
}
}
//右中点
if(*(image_d+*(image_mask+l*xsize+k)+xsize)<Current_Dist && (*(image_out+*(image_mask+l*xsize+k)+xsize)>0 || *(image_out+*(image_mask+l*xsize+k)+xsize) == WSHED))
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize) >0)
{
if(*(image_out+*(image_mask+l*xsize+k)) == MASK || *(image_out+*(image_mask+l*xsize+k)) == WSHED)
*(image_out+*(image_mask+l*xsize+k)) = *(image_out+*(image_mask+l*xsize+k)+xsize);
else
{
if(*(image_out+*(image_mask+l*xsize+k)) != *(image_out+*(image_mask+l*xsize+k)+xsize))
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize) == MASK && *(image_d+*(image_mask+l*xsize+k)+xsize) == 0)
{
*(image_d+*(image_mask+l*xsize+k)+xsize) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)+xsize;
}
}
}
//右下点
if(*(image_d+*(image_mask+l*xsize+k)+xsize+1)<Current_Dist && (*(image_out+*(image_mask+l*xsize+k)+xsize+1)>0 || *(image_out+*(image_mask+l*xsize+k)+xsize+1) == WSHED))
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize+1) >0)
{
if(*(image_out+*(image_mask+l*xsize+k)) == MASK || *(image_out+*(image_mask+l*xsize+k)) == WSHED)
*(image_out+*(image_mask+l*xsize+k)) = *(image_out+*(image_mask+l*xsize+k)+xsize+1);
else
{
if(*(image_out+*(image_mask+l*xsize+k)) != *(image_out+*(image_mask+l*xsize+k)+xsize+1))
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)) == -1)
{
*(image_out+*(image_mask+l*xsize+k)) = WSHED;
}
}
}
else
{
if(*(image_out+*(image_mask+l*xsize+k)+xsize+1) == MASK && *(image_d+*(image_mask+l*xsize+k)+xsize+1) == 0)
{
*(image_d+*(image_mask+l*xsize+k)+xsize+1) = Current_Dist+1;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+l*xsize+k)+xsize+1;
}
}
}
}
}
//对于当前层为h的节点p
for(x = 1;x<xsize-1;x++)
for(y = 1;y<ysize-1;y++)
{
if(*(image_in+*(image_mask+y*xsize+x)) == h)
{
*(image_d+*(image_mask+y*xsize+x)) = 0;
if(*(image_out+*(image_mask+y*xsize+x)) != MASK)
{
Current_Label++;
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = *(image_mask+y*xsize+x);
}
*(image_out+*(image_mask+y*xsize+x)) = Current_Label;
//如果队列不空
if(QU->front != QU->rear)
{
//队列中第一个节点移出给p'
{
QU->front = (QU->front+1)%SIZE;
p2 =QU->q[QU->front];
}
int a[8] = {0};
a[0] = -xsize-1;
a[1] = -xsize;
a[2] = -xsize+1;
a[3] = -1;
a[4] = 1;
a[5] = xsize-1;
a[6] = xsize;
a[7] = xsize+1;
for(int z = 0;z<8;z++)
{
//如果p''仍属于当前层节点且未标记
if(*(image_in+p2+a[z]) == h && *(image_out+p2+a[z]) != MASK)
{
{
QU->rear = (QU->rear+1)%SIZE;
QU->q[QU->rear] = p2+a[z];
}
*(image_out+p2+a[z]) = Current_Label;
}
}
}
}
}
}
}
else
{
h = *(image_in+*(image_mask+l*xsize+k));
goto label1;
}
}
delete[] QU;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -