📄 edge_detectionview.cpp
字号:
if(*(pdGrad+y*nWidth+x)>50)
*( lpImage+y*nSaveWidth+x )=0;
else
*( lpImage+y*nSaveWidth+x )=255;
}
//释放内存空间
delete []pdGrad;
pdGrad=NULL;
// 恢复光标形状
EndWaitCursor();
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
}
/******************************************
这里就是只用到了空间距计算出来后的模板和图象的卷积来计算
*******************************************/
void CEdge_detectionView::OnSpatialMoment()
{
// TODO: Add your command handler code here
CEdge_detectionDoc * pDoc = (CEdge_detectionDoc *)this->GetDocument();
ASSERT_VALID(pDoc);
CDib* pDib = pDoc->m_pDibInit;
LPBITMAPINFOHEADER lpBMIH=pDib->m_lpBMIH;
// 判断是否是8-bpp位图
if (lpBMIH->biBitCount != 8)
{
// 提示用户
MessageBox("目前只支持256色位图的图象分割!", "系统提示" ,
MB_ICONINFORMATION | MB_OK);
// 返回
return;
}
// 循环控制变量
int y;
int x;
//控制显示的宽度
static int flag = 0;
int count = 0;
CSize sizeImage = pDib->GetDimensions();
int nWidth = sizeImage.cx ;
int nHeight= sizeImage.cy ;
//图象保存的宽度
int nSaveWidth = pDib->GetDibSaveDim().cx;
//定义三个数组,分别用来保存每个模板中心点的H,K,L
double *h = new double[nWidth*nHeight];
double *l = new double[nWidth*nHeight];
double *k = new double[nWidth*nHeight];
//定义六个用来存储6个矩的变量
double M00 = 0.0, M01 = 0.0, M10 = 0.0, M11 = 0.0, M20 = 0.0, M02 = 0.0;
//定义三个用来存储旋转后的矩的值
double M_00 = 0.0, M_10 = 0.0, M_20 = 0.0;
//test
double temp1=0.0,temp2=0.0,temp3=0.0,temp4=0.0,temp5=0.0,temp6=0.0,temp7=0.0;
//取出每个点之后进行与模版相与处理
for(x = 2; x < nWidth-2; x++)
{
for(y = 2; y<nHeight-2; y++)
{
if(pDib->m_lpImage[x*nHeight+y] == 0)
{
//重置为0
M00 = 0;
M00 = 0;
M01 = 0;
M10 = 0;
M11 = 0;
M20 = 0;
M02 = 0;
M_00 = 0;
M_10 = 0;
M_20 = 0;
//计算
M00 = pDib->m_lpImage[(x*nHeight-2)+(y-2)]*0.0219 + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*0.1231
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.1573 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.1231
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0219
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*0.1231 +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*0.1600
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.1600 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.1600
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.1231
+pDib->m_lpImage[(x*nHeight-2)+(y)]*0.1573 +pDib->m_lpImage[(x*nHeight-1)+(y)]*0.1600
+pDib->m_lpImage[(x*nHeight)+(y)]*0.1600 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.1600
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.1573
+pDib->m_lpImage[(x*nHeight-2)+(y+1)]*0.1231 +pDib->m_lpImage[(x*nHeight-1)+(y+1)]*0.1600
+pDib->m_lpImage[(x*nHeight)+(y+1)]*0.1600 +pDib->m_lpImage[(x*nHeight+1)+(y+1)]*0.1600
+pDib->m_lpImage[(x*nHeight+2)+(y+1)]*0.1231
+pDib->m_lpImage[(x*nHeight-2)+(y+2)]*0.0219 +pDib->m_lpImage[(x*nHeight-1)+(y+2)]*0.1231
+pDib->m_lpImage[(x*nHeight)+(y+2)]*0.1573 +pDib->m_lpImage[(x*nHeight+1)+(y+2)]*0.1231
+pDib->m_lpImage[(x*nHeight+2)+(y+2)]*0.0219;
M11= pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(-0.0098) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(-0.0352)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.0352
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0098
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(-0.0352) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(-0.0256)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.0256
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.0352
+pDib->m_lpImage[(x*nHeight-2)+(y)]*0.0000 +pDib->m_lpImage[(x*nHeight-1)+(y)]*0.0000
+pDib->m_lpImage[(x*nHeight)+(y)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.0000
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.0000
+pDib->m_lpImage[(x*nHeight-2)+(y+1)]*0.0352 +pDib->m_lpImage[(x*nHeight-1)+(y+1)]*0.0256
+pDib->m_lpImage[(x*nHeight)+(y+1)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y+1)]*(-0.0256)
+pDib->m_lpImage[(x*nHeight+2)+(y+1)]*(-0.0325)
+pDib->m_lpImage[(x*nHeight-2)+(y+2)]*0.0098 +pDib->m_lpImage[(x*nHeight-1)+(y+2)]*0.0352
+pDib->m_lpImage[(x*nHeight)+(y+2)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y+2)]*(-0.0352)
+pDib->m_lpImage[(x*nHeight+2)+(y+2)]*(-0.0098);
M10= pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(-0.0147) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(-0.0469)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.0469
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0147
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(-0.0933) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.0640
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.0933
+pDib->m_lpImage[(x*nHeight-2)+(y)]*(-0.1253) +pDib->m_lpImage[(x*nHeight-1)+(y)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight)+(y)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.0640
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.1253
+pDib->m_lpImage[(x*nHeight-2)+(y+1)]*(-0.0933) +pDib->m_lpImage[(x*nHeight-1)+(y+1)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight)+(y+1)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y+1)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight+2)+(y+1)]*(0.0933)
+pDib->m_lpImage[(x*nHeight-2)+(y+2)]*(-0.0147) +pDib->m_lpImage[(x*nHeight-1)+(y+2)]*(-0.0469)
+pDib->m_lpImage[(x*nHeight)+(y+2)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y+2)]*(0.0469)
+pDib->m_lpImage[(x*nHeight+2)+(y+2)]*(0.0147);
M01= pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(0.0147) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(0.0933)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.1253 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.0933
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0147
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(0.4609) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(0.0640)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.0640 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.0640
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.4609
+pDib->m_lpImage[(x*nHeight-2)+(y)]*(0.0000) +pDib->m_lpImage[(x*nHeight-1)+(y)]*(0.0000)
+pDib->m_lpImage[(x*nHeight)+(y)]*0.0000 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.0000
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.0000
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(-0.4609) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*(-0.0640) +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*(-0.0640)
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*(-0.4609)
+pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(-0.0147) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(-0.0933)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*(-0.1253) +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*(-0.0933)
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*(-0.0147) ;
M20= pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(0.0099) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(0.0194)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.0021 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.0194
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0099
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(0.0719) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(0.0277)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.0021 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.0277
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.0719
+pDib->m_lpImage[(x*nHeight-2)+(y)]*(0.1019) +pDib->m_lpImage[(x*nHeight-1)+(y)]*(0.0277)
+pDib->m_lpImage[(x*nHeight)+(y)]*0.0021 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.0277
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.1019
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(0.0719) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(0.0277)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*(0.0021) +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*(0277)
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*(0.0719)
+pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(0.0099) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(0.0194)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*(0.0021) +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*(0.0194)
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*(0.0099) ;
M02= pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(0.0099) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(0.0719)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*0.1019 +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*0.0719
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*0.0099
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(0.0194) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(0.0277)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*0.0277 +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*0.0277
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*0.0194
+pDib->m_lpImage[(x*nHeight-2)+(y)]*(0.0021) +pDib->m_lpImage[(x*nHeight-1)+(y)]*(0.0021)
+pDib->m_lpImage[(x*nHeight)+(y)]*0.0021 +pDib->m_lpImage[(x*nHeight+1)+(y)]*0.0021
+pDib->m_lpImage[(x*nHeight+2)+(y)]*0.0021
+pDib->m_lpImage[(x*nHeight-2)+(y-1)]*(0.0194) +pDib->m_lpImage[(x*nHeight-1)+(y-1)]*(0.0277)
+pDib->m_lpImage[(x*nHeight)+(y-1)]*(0.0277) +pDib->m_lpImage[(x*nHeight+1)+(y-1)]*(0277)
+pDib->m_lpImage[(x*nHeight+2)+(y-1)]*(0.0194)
+pDib->m_lpImage[(x*nHeight-2)+(y-2)]*(0.0099) + pDib->m_lpImage[(x*nHeight-1)+(y-2)]*(0.0719)
+pDib->m_lpImage[(x*nHeight)+(y-2)]*(0.1019) +pDib->m_lpImage[(x*nHeight+1)+(y-2)]*(0.0719)
+pDib->m_lpImage[(x*nHeight+2)+(y-2)]*(0.0099) ;
M_00 = M00;
if(M01*M01+M10*M10>=0)
{
M_10 = sqrt(M01*M01+M10*M10);
}
if((M01*M01+M10*M10)!=0)
{
M_20 = (M10*M10*M20 + 2*M01*M10*M11 + M01*M01*M02)/(M01*M01+M10*M10);
}
// temp1=M00;
// temp2=M01;
// temp3=M11;
// temp4=M10;
// temp5=M20;
// temp6=M02;
//计算每个L,H,K并存入数组
temp1=3*M_10;
if(temp1!=0)
{
l[x*(nHeight-2)+y] = ((4*M_20)-M_00)/temp1;
}
if((1-l[x*(nHeight-2)+y]*l[x*(nHeight-2)+y])>=0)
{
temp2=2*sqrt((1-l[x*(nHeight-2)+y]*l[x*(nHeight-2)+y])*(1-l[x*(nHeight-2)+y]*l[x*(nHeight-2)+y])*(1-l[x*(nHeight-2)+y]*l[x*(nHeight-2)+y]));
}
if(temp2!=0)
{
k[x*(nHeight-2)+y] = (3*M_10)/temp2;
}
// h[x*(nHeight-2)+y] = (2M_00-arcsine();
CDC* pDC = GetDC();
CString str;
str.Format("%f",l[x*(nHeight-2)+y]);
pDC->TextOut(300,0+flag,str);
flag += 20;
// }
}
}
}
/* for(int r=0;r<5;r++)
{
CDC* pDC = GetDC();
CString str;
str.Format("%f",l[r]);
pDC->TextOut(300,flag,str);
flag += 20;
}
*/
CString str1,str2;
str1.Format("%f",2.34);
str1=str1+"\n";
str2.Format("%f",3.24);
str1=str1+str2;
//Invalidate();
// MessageBox(str1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -