📄 seqprocessdlg.cpp
字号:
if(FirstCandidate==NULL)
{
FirstCandidate=new SeedCandidate;
LastCandidate=FirstCandidate;
FirstCandidate->nextCand=NULL;
FirstCandidate->seed_cand.x=seed.x+m;
FirstCandidate->seed_cand.y=seed.y+k;
seedcand=FirstCandidate->seed_cand;
rgbToHsv(imgPrev(seed.y,seed.x,0),imgPrev(seed.y,seed.x,1),imgPrev(seed.y,seed.x,2),seedhsi.Hue, seedhsi.Sat,seedhsi.Inten);
rgbToHsv(imgNext(seedcand.y,seedcand.x,0),imgNext(seedcand.y,seedcand.x,1),imgNext(seedcand.y,seedcand.x,2),candhsi.Hue, candhsi.Sat,candhsi.Inten);
FirstCandidate->HueError=abs(seedhsi.Hue-candhsi.Hue);
rgbToHsv(imgPrev(seed.y+3,seed.x,0),imgPrev(seed.y+3,seed.x,1),imgPrev(seed.y+3,seed.x,2),seedhsiDown.Hue,seedhsiDown.Sat,seedhsiDown.Inten);
rgbToHsv(imgNext(seedcand.y+3,seedcand.x,0),imgNext(seedcand.y+3,seedcand.x,1),imgNext(seedcand.y+3,seedcand.x,2),candhsiDown.Hue, candhsiDown.Sat,candhsiDown.Inten);
FirstCandidate->HueError+=abs(seedhsiDown.Hue-candhsiDown.Hue);
if(seedcand.y-3>0)
{
rgbToHsv(imgPrev(seed.y-3,seed.x,0),imgPrev(seed.y-3,seed.x,1),imgPrev(seed.y-3,seed.x,2),seedhsiUp.Hue,seedhsiUp.Sat,seedhsiUp.Inten);
rgbToHsv(imgNext(seedcand.y-3,seedcand.x,0),imgNext(seedcand.y-3,seedcand.x,1),imgNext(seedcand.y-3,seedcand.x,2),candhsiUp.Hue,candhsiUp.Sat,candhsiUp.Inten);
FirstCandidate->HueError+=abs(seedhsiUp.Hue-candhsiUp.Hue);
FirstCandidate->HueError/=3;
}
else FirstCandidate->HueError/=2;
//FirstCandidate->GradMagError=abs(GradientMagnitude[frame](seedcand.y,seedcand.x)-GradientMagnitude[m_startframe](seed.y,seed.x));
//FirstCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y+3,seedcand.x)-GradientMagnitude[m_startframe](seed.y+3,seed.x));
FirstCandidate->GradMagError=GradientMagnitude[frame](seedcand.y,seedcand.x);
/*FirstCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y+3,seedcand.x);
if(seedcand.y-3>0)
{
//FirstCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y-3,seedcand.x)-GradientMagnitude[m_startframe](seed.y-3,seed.x));
FirstCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y-3,seedcand.x);
FirstCandidate->GradMagError/=3;
}
else FirstCandidate->GradMagError/=2;*/
Numcandidate=1;
}
else
{
NewCandidate=new SeedCandidate;
NewCandidate->nextCand=NULL;
NewCandidate->seed_cand.x=seed.x+m;
NewCandidate->seed_cand.y=seed.y+k;
seedcand=NewCandidate->seed_cand;
LastCandidate->nextCand=NewCandidate;
LastCandidate=NewCandidate;
rgbToHsv(imgPrev(seed.y,seed.x,0),imgPrev(seed.y,seed.x,1),imgPrev(seed.y,seed.x,2),seedhsi.Hue, seedhsi.Sat,seedhsi.Inten);
rgbToHsv(imgNext(seedcand.y,seedcand.x,0),imgNext(seedcand.y,seedcand.x,1),imgNext(seedcand.y,seedcand.x,2),candhsi.Hue, candhsi.Sat,candhsi.Inten);
NewCandidate->HueError=abs(seedhsi.Hue-candhsi.Hue);
rgbToHsv(imgPrev(seed.y+3,seed.x,0),imgPrev(seed.y+3,seed.x,1),imgPrev(seed.y+3,seed.x,2),seedhsiDown.Hue,seedhsiDown.Sat,seedhsiDown.Inten);
rgbToHsv(imgNext(seedcand.y+3,seedcand.x,0),imgNext(seedcand.y+3,seedcand.x,1),imgNext(seedcand.y+3,seedcand.x,2),candhsiDown.Hue, candhsiDown.Sat,candhsiDown.Inten);
NewCandidate->HueError+=abs(seedhsiDown.Hue-candhsiDown.Hue);
if(seedcand.y-3>0)
{
rgbToHsv(imgPrev(seed.y-3,seed.x,0),imgPrev(seed.y-3,seed.x,1),imgPrev(seed.y-3,seed.x,2),seedhsiUp.Hue,seedhsiUp.Sat,seedhsiUp.Inten);
rgbToHsv(imgNext(seedcand.y-3,seedcand.x,0),imgNext(seedcand.y-3,seedcand.x,1),imgNext(seedcand.y-3,seedcand.x,2),candhsiUp.Hue,candhsiUp.Sat,candhsiUp.Inten);
NewCandidate->HueError+=abs(seedhsiUp.Hue-candhsiUp.Hue);
NewCandidate->HueError/=3;
}
else NewCandidate->HueError/=2;
//NewCandidate->GradMagError=abs(GradientMagnitude[frame](seedcand.y,seedcand.x)-GradientMagnitude[m_startframe](seed.y,seed.x));
//NewCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y+3,seedcand.x)-GradientMagnitude[m_startframe](seed.y+3,seed.x));
NewCandidate->GradMagError=GradientMagnitude[frame](seedcand.y,seedcand.x);
/*NewCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y+3,seedcand.x);
if(seedcand.y-3>0)
{
//NewCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y-3,seedcand.x)-GradientMagnitude[m_startframe](seed.y-3,seed.x));
NewCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y-3,seedcand.x);
NewCandidate->GradMagError/=3;
}
else NewCandidate->GradMagError/=2;*/
Numcandidate++;
}
}
else
{
distance=pow(seed.y-seed_array[index-1].y,2)+pow(seed.x-seed_array[index-1].x,2);
distance=pow(distance,0.5);
if((seed.x-seed_array[index-1].x)!=0) angle=atan((seed.y-seed_array[index-1].y)/(seed.x-seed_array[index-1].x));
else angle=1.5708;
if(FirstCandidate==NULL)
{
FirstCandidate=new SeedCandidate;
LastCandidate=FirstCandidate;
FirstCandidate->nextCand=NULL;
FirstCandidate->seed_cand.x=seed.x+m;
FirstCandidate->seed_cand.y=seed.y+k;
seedcand=FirstCandidate->seed_cand;
CandDistance=pow(seedcand.y-next_seed_array[index-1].y,2)+pow(seedcand.x-next_seed_array[index-1].x,2);
CandDistance=pow(CandDistance,0.5);
if((seedcand.x-next_seed_array[index-1].x)!=0) CandAngle=atan((seedcand.y-next_seed_array[index-1].y)/(seedcand.x-next_seed_array[index-1].x));
else CandAngle=1.5708;
FirstCandidate->PositionError=abs(distance-CandDistance)*100/distance;
FirstCandidate->PositionError+=abs(angle-CandAngle)*100/angle;
rgbToHsv(imgPrev(seed.y,seed.x,0),imgPrev(seed.y,seed.x,1),imgPrev(seed.y,seed.x,2),seedhsi.Hue, seedhsi.Sat,seedhsi.Inten);
rgbToHsv(imgNext(seedcand.y,seedcand.x,0),imgNext(seedcand.y,seedcand.x,1),imgNext(seedcand.y,seedcand.x,2),candhsi.Hue, candhsi.Sat,candhsi.Inten);
FirstCandidate->HueError=abs(seedhsi.Hue-candhsi.Hue);
rgbToHsv(imgPrev(seed.y+3,seed.x,0),imgPrev(seed.y+3,seed.x,1),imgPrev(seed.y+3,seed.x,2),seedhsiDown.Hue,seedhsiDown.Sat,seedhsiDown.Inten);
rgbToHsv(imgNext(seedcand.y+3,seedcand.x,0),imgNext(seedcand.y+3,seedcand.x,1),imgNext(seedcand.y+3,seedcand.x,2),candhsiDown.Hue, candhsiDown.Sat,candhsiDown.Inten);
FirstCandidate->HueError+=abs(seedhsiDown.Hue-candhsiDown.Hue);
if(seedcand.y-3>0)
{
rgbToHsv(imgPrev(seed.y-3,seed.x,0),imgPrev(seed.y-3,seed.x,1),imgPrev(seed.y-3,seed.x,2),seedhsiUp.Hue,seedhsiUp.Sat,seedhsiUp.Inten);
rgbToHsv(imgNext(seedcand.y-3,seedcand.x,0),imgNext(seedcand.y-3,seedcand.x,1),imgNext(seedcand.y-3,seedcand.x,2),candhsiUp.Hue,candhsiUp.Sat,candhsiUp.Inten);
FirstCandidate->HueError+=abs(seedhsiUp.Hue-candhsiUp.Hue);
FirstCandidate->HueError/=3;
}
else FirstCandidate->HueError/=2;
//FirstCandidate->GradMagError=abs(GradientMagnitude[frame](seedcand.y,seedcand.x)-GradientMagnitude[m_startframe](seed.y,seed.x));
//FirstCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y+3,seedcand.x)-GradientMagnitude[m_startframe](seed.y+3,seed.x));
FirstCandidate->GradMagError=GradientMagnitude[frame](seedcand.y,seedcand.x);
/*FirstCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y+3,seedcand.x);
if(seedcand.y-3>0)
{
//FirstCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y-3,seedcand.x)-GradientMagnitude[m_startframe](seed.y-3,seed.x));
FirstCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y-3,seedcand.x);
FirstCandidate->GradMagError/=3;
}
else FirstCandidate->GradMagError/=2;*/
Numcandidate=1;
}
else
{
NewCandidate=new SeedCandidate;
NewCandidate->nextCand=NULL;
NewCandidate->seed_cand.x=seed.x+m;
NewCandidate->seed_cand.y=seed.y+k;
seedcand=NewCandidate->seed_cand;
LastCandidate->nextCand=NewCandidate;
LastCandidate=NewCandidate;
CandDistance=pow(seedcand.y-next_seed_array[index-1].y,2)+pow(seedcand.x-next_seed_array[index-1].x,2);
CandDistance=pow(CandDistance,0.5);
if((seedcand.x-next_seed_array[index-1].x)!=0) CandAngle=atan((seedcand.y-next_seed_array[index-1].y)/(seedcand.x-next_seed_array[index-1].x));
else CandAngle=1.5708;
NewCandidate->PositionError=abs(distance-CandDistance)*100/distance;
NewCandidate->PositionError+=abs(angle-CandAngle)*100/angle;
rgbToHsv(imgPrev(seed.y,seed.x,0),imgPrev(seed.y,seed.x,1),imgPrev(seed.y,seed.x,2),seedhsi.Hue, seedhsi.Sat,seedhsi.Inten);
rgbToHsv(imgNext(seedcand.y,seedcand.x,0),imgNext(seedcand.y,seedcand.x,1),imgNext(seedcand.y,seedcand.x,2),candhsi.Hue, candhsi.Sat,candhsi.Inten);
NewCandidate->HueError=abs(seedhsi.Hue-candhsi.Hue);
rgbToHsv(imgPrev(seed.y+3,seed.x,0),imgPrev(seed.y+3,seed.x,1),imgPrev(seed.y+3,seed.x,2),seedhsiDown.Hue,seedhsiDown.Sat,seedhsiDown.Inten);
rgbToHsv(imgNext(seedcand.y+3,seedcand.x,0),imgNext(seedcand.y+3,seedcand.x,1),imgNext(seedcand.y+3,seedcand.x,2),candhsiDown.Hue, candhsiDown.Sat,candhsiDown.Inten);
NewCandidate->HueError+=abs(seedhsiDown.Hue-candhsiDown.Hue);
if(seedcand.y-3>0)
{
rgbToHsv(imgPrev(seed.y-3,seed.x,0),imgPrev(seed.y-3,seed.x,1),imgPrev(seed.y-3,seed.x,2),seedhsiUp.Hue,seedhsiUp.Sat,seedhsiUp.Inten);
rgbToHsv(imgNext(seedcand.y-3,seedcand.x,0),imgNext(seedcand.y-3,seedcand.x,1),imgNext(seedcand.y-3,seedcand.x,2),candhsiUp.Hue,candhsiUp.Sat,candhsiUp.Inten);
NewCandidate->HueError+=abs(seedhsiUp.Hue-candhsiUp.Hue);
NewCandidate->HueError/=3;
}
else NewCandidate->HueError/=2;
//NewCandidate->GradMagError=abs(GradientMagnitude[frame](seedcand.y,seedcand.x)-GradientMagnitude[m_startframe](seed.y,seed.x));
//NewCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y+3,seedcand.x)-GradientMagnitude[m_startframe](seed.y+3,seed.x));
NewCandidate->GradMagError=GradientMagnitude[frame](seedcand.y,seedcand.x);
/*NewCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y+3,seedcand.x);
if(seedcand.y-3>0)
{
//NewCandidate->GradMagError+=abs(GradientMagnitude[frame](seedcand.y-3,seedcand.x)-GradientMagnitude[m_startframe](seed.y-3,seed.x));
NewCandidate->GradMagError+=GradientMagnitude[frame](seedcand.y-3,seedcand.x);
NewCandidate->GradMagError/=3;
}
else NewCandidate->GradMagError/=2;*/
Numcandidate++;
}
}
}
NewCandidate=new SeedCandidate;
//GRADIENT MAGNITUDE CRITERION
for(i=1; i<=Numcandidate; i++)
{
Test1=FirstCandidate;
Test2=FirstCandidate->nextCand;
while(Test1->nextCand!=NULL)
{
if(Test1->GradMagError <(Test2->GradMagError))
{
NewCandidate->seed_cand=Test2->seed_cand;
NewCandidate->HueError= Test2->HueError;
NewCandidate->GradMagError=Test2->GradMagError;
NewCandidate->PositionError=Test2->PositionError;
Test2->seed_cand = Test1->seed_cand;
Test2->HueError =Test1->HueError;
Test2->GradMagError =Test1->GradMagError;
Test2->PositionError =Test1->PositionError;
Test1->seed_cand=NewCandidate->seed_cand;
Test1->HueError=NewCandidate->HueError;
Test1->GradMagError=NewCandidate->GradMagError;
Test1->PositionError=NewCandidate->PositionError;
}
Test2=Test2->nextCand;
Test1=Test1->nextCand;
}
}
//PositionError CRITERION
if(Numcandidate>40) N=20;
else if(Numcandidate>=20) N=15;
else if(Numcandidate>=10) N=8;
else if(Numcandidate>=5) N=4;
else N=0;
for(i=1; i<=N; i++)
{
Test1=FirstCandidate;
Test2=FirstCandidate->nextCand;
count = 0;
while(count<N-1)
{
if(Test1->PositionError > (Test2->PositionError))
{
NewCandidate->seed_cand=Test2->seed_cand;
NewCandidate->HueError= Test2->HueError;
NewCandidate->GradMagError=Test2->GradMagError;
NewCandidate->PositionError= Test2->PositionError;
Test2->seed_cand = Test1->seed_cand;
Test2->HueError =Test1->HueError;
Test2->GradMagError =Test1->GradMagError;
Test2->PositionError =Test1->PositionError;
Test1->seed_cand=NewCandidate->seed_cand;
Test1->HueError=NewCandidate->HueError;
Test1->GradMagError=NewCandidate->GradMagError;
Test1->PositionError=NewCandidate->PositionError;
}
Test2=Test2->nextCand;
Test1=Test1->nextCand;
count++;
}
}
//HUE MATCHING CRITERION
if(Numcandidate>40) N=10;
else if(Numcandidate>=20) N=7;
else if(Numcandidate>=10) N=4;
else if(Numcandidate>=5) N=2;
else N=0;
for(i=1; i<=N; i++)
{
Test1=FirstCandidate;
Test2=FirstCandidate->nextCand;
count = 0;
while(count<N-1)
{
if(Test1->HueError > (Test2->HueError))
{
NewCandidate->seed_cand=Test2->seed_cand;
NewCandidate->HueError= Test2->HueError;
NewCandidate->GradMagError=Test2->GradMagError;
Test2->seed_cand = Test1->seed_cand;
Test2->HueError =Test1->HueError;
Test2->GradMagError =Test1->GradMagError;
Test1->seed_cand=NewCandidate->seed_cand;
Test1->HueError=NewCandidate->HueError;
Test1->GradMagError=NewCandidate->GradMagError;
}
Test2=Test2->nextCand;
Test1=Test1->nextCand;
count++;
}
}
upsearch=0;
downsearch=0;
count=0;
i=1;
if(index<=8)
{
if(FirstCandidate->seed_cand.y>15) upsearch=12;
else if(FirstCandidate->seed_cand.y>10) upsearch=7;
else if(FirstCandidate->seed_cand.y>5) upsearch=3;
else upsearch=0;
while(i<=upsearch)
{
if(abs(GradientMagnitude[fr+1](FirstCandidate->seed_cand.y-i,FirstCandidate->seed_cand.x)-GradMagUpAve)<=GradMagUpStdDev/3) count++;
i++;
}
testseed=FirstCandidate->seed_cand;
if(count>=3)
{
for(i = 1; i<=upsearch;i++)
if(abs(GradientMagnitude[fr+1](testseed.y-i,testseed.x)- GradMagUpAve)<=GradMagUpStdDev/3)
{
/*rgbToHsv(imgPrev(seed.y,seed.x,0),imgPrev(seed.y,seed.x,1),imgPrev(seed.y,seed.x,2),hsi_prev.Hue, hsi_prev.Sat, hsi_prev.Inten);
rgbToHsv(imgNext(testseed.y-i,testseed.x,0),imgNext(testseed.y-i,testseed.x,1),imgNext(testseed.y-i,testseed.x,2),hsi_next.Hue, hsi_next.Sat, hsi_next.Inten);
inouterror2=abs(hsi_prev.Hue-hsi_next.Hue);
rgbToHsv(imgPrev(seed.y+3,seed.x,0),imgPrev(seed.y+3,seed.x,1),imgPrev(seed.y+3,seed.x,2),hsi_prev.Hue, hsi_prev.Sat, hsi_prev.Inten);
rgbToHsv(imgNext(testseed.y+3-i,testseed.x,0),imgNext(testseed.y+3-i,testseed.x,1),imgNext(testseed.y+3-i,testseed.x,2),hsi_next.Hue, hsi_next.Sat, hsi_next.Inten);
inouterror2+=abs(hsi_prev.Hue-hsi_next.Hue);
rgbToHsv(imgPrev(seed.y-3,seed.x,0),imgPrev(seed.y-3,seed.x,1),imgPrev(seed.y-3,seed.x,2),hsi_prev.Hue, hsi_prev.Sat, hsi_prev.Inten);
rgbToHsv(imgNext(testseed.y-3-i,testseed.x,0),imgNext(testseed.y-3-i,testseed.x,1),imgNext(testseed.y-3-i,testseed.x,2),hsi_next.Hue, hsi_next.Sat, hsi_next.Inten);
inouterror2+=abs(hsi_prev.Hue-hsi_next.Hue);
*/
inouterror2=GradientMagnitude[fr+1](testseed.y-i,testseed.x);
if(i==1)
{
inouterror=inouterror2;
FirstCandidate->seed_cand.y = FirstCandidate->seed_cand.y-1;
}
else if(inouterror2>inouterror) //b鼀黭 gradyanl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -