⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edge_detectionview.cpp

📁 边缘检测原代码. 边缘检测原代码.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -