`

高斯拉普拉斯锐化(边缘检测)vc实现

阅读更多

高斯拉普拉斯锐化(边缘检测)vc实现  -LoG锐化,边缘检测。



void CSDIELSView::OnSharpeningGaussianAndLaplace()
	{
//程序编制:李立宗  lilizong@gmail.com
//2012-8-12
			if(myImage1.IsNull())
			OnOpenResourceFile();
		if(!myImage2.IsNull())
			myImage2.Destroy();
		if(myImage2.IsNull()){
			myImage2.Create(myImage1.GetWidth(),myImage1.GetHeight(),24,0);
		}
		//COLORREF pixel; 
		int maxY = myImage1.GetHeight();
		int maxX=myImage1.GetWidth();
		byte* pRealData;
		byte* pRealData2;
		pRealData=(byte*)myImage1.GetBits();
		pRealData2=(byte*)myImage2.GetBits();
		int pit=myImage1.GetPitch();
		int pit2=myImage2.GetPitch();
		//需要注意,pit和pit2的值并不一样,所以如果使用一个值,会导致不同的结果出现
		//CString str;
		//str.Format(TEXT("%d"),pit);
		//MessageBox(str);
		//str.Format(TEXT("%d"),pit2);
		//MessageBox(str);
		int bitCount=myImage1.GetBPP()/8;
		int bitCount2=myImage2.GetBPP()/8;
		int tempR,tempG,tempB;
		float temp,tempX,tempY;

		//int M[3][3]={{1,2,1},{2,4,2},{1,2,1}};
		int M[5][5]={{-2,-4,-4,-4,-2},{-4,0,8,0,-4},{-4,8,24,8,-4},{-4,0,8,0,-4},{-2,-4,-4,-4,-2}};
		int sum=0;
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				sum=sum+M[i][j];
		//	tempR=tempG=tempG=0;
		//说明:将生产的图像作为24位图处理。
		for (int y=2; y<maxY-2; y++) {
			for (int x=2; x<maxX-2; x++) {
				tempR=
					*(pRealData+pit*(y-2)+(x-2)*bitCount)*M[0][0]+*(pRealData+pit*(y-2)+(x-1)*bitCount)*M[0][1]+*(pRealData+pit*(y-2)+(x)*bitCount)*M[0][2]+*(pRealData+pit*(y-2)+(x+1)*bitCount)*M[0][3]+*(pRealData+pit*(y-2)+(x+2)*bitCount)*M[0][4]
				+	*(pRealData+pit*(y-1)+(x-2)*bitCount)*M[1][0]+*(pRealData+pit*(y-1)+(x-1)*bitCount)*M[1][1]+*(pRealData+pit*(y-1)+(x)*bitCount)*M[1][2]+*(pRealData+pit*(y-1)+(x+1)*bitCount)*M[1][3]+*(pRealData+pit*(y-1)+(x+2)*bitCount)*M[1][4]
				+	*(pRealData+pit*(y)+(x-2)*bitCount)*M[2][0]+*(pRealData+pit*(y)+(x-1)*bitCount)*M[2][1]+*(pRealData+pit*(y)+(x)*bitCount)*M[2][2]+*(pRealData+pit*(y)+(x+1)*bitCount)*M[2][3]+*(pRealData+pit*(y)+(x+2)*bitCount)*M[2][4]
				+*(pRealData+pit*(y+1)+(x-2)*bitCount)*M[3][0]+*(pRealData+pit*(y+1)+(x-1)*bitCount)*M[3][1]+*(pRealData+pit*(y+1)+(x)*bitCount)*M[3][2]+*(pRealData+pit*(y+1)+(x+1)*bitCount)*M[3][3]+*(pRealData+pit*(y+1)+(x+2)*bitCount)*M[3][4]	
				+*(pRealData+pit*(y+2)+(x-2)*bitCount)*M[4][0]+*(pRealData+pit*(y+2)+(x-1)*bitCount)*M[4][1]+*(pRealData+pit*(y+2)+(x)*bitCount)*M[4][2]+*(pRealData+pit*(y+2)+(x+1)*bitCount)*M[4][3]+*(pRealData+pit*(y+2)+(x+2)*bitCount)*M[4][4]
				;
				tempR=abs(tempR);
				if(tempR>255)
					tempR=255;


				if(bitCount==1)
				{
					tempG=tempR;
					tempB=tempR;
				}
				else
				{
					tempG=
						*(pRealData+pit*(y-2)+(x-2)*bitCount+1)*M[0][0]+*(pRealData+pit*(y-2)+(x-1)*bitCount+1)*M[0][1]+*(pRealData+pit*(y-2)+(x)*bitCount+1)*M[0][2]+*(pRealData+pit*(y-2)+(x+1)*bitCount+1)*M[0][3]+*(pRealData+pit*(y-2)+(x+2)*bitCount+1)*M[0][4]
					+	*(pRealData+pit*(y-1)+(x-2)*bitCount+1)*M[1][0]+*(pRealData+pit*(y-1)+(x-1)*bitCount+1)*M[1][1]+*(pRealData+pit*(y-1)+(x)*bitCount+1)*M[1][2]+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)*M[1][3]+*(pRealData+pit*(y-1)+(x+2)*bitCount+1)*M[1][4]
					+	*(pRealData+pit*(y)+(x-2)*bitCount+1)*M[2][0]+*(pRealData+pit*(y)+(x-1)*bitCount+1)*M[2][1]+*(pRealData+pit*(y)+(x)*bitCount+1)*M[2][2]+*(pRealData+pit*(y)+(x+1)*bitCount+1)*M[2][3]+*(pRealData+pit*(y)+(x+2)*bitCount+1)*M[2][4]
					+*(pRealData+pit*(y+1)+(x-2)*bitCount+1)*M[3][0]+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)*M[3][1]+*(pRealData+pit*(y+1)+(x)*bitCount+1)*M[3][2]+*(pRealData+pit*(y+1)+(x+1)*bitCount+1)*M[3][3]+*(pRealData+pit*(y+1)+(x+2)*bitCount+1)*M[3][4]	
					+*(pRealData+pit*(y+2)+(x-2)*bitCount+1)*M[4][0]+*(pRealData+pit*(y+2)+(x-1)*bitCount+1)*M[4][1]+*(pRealData+pit*(y+2)+(x)*bitCount+1)*M[4][2]+*(pRealData+pit*(y+2)+(x+1)*bitCount+1)*M[4][3]+*(pRealData+pit*(y+2)+(x+2)*bitCount+1)*M[4][4]
					;
					tempG=abs(tempG);
					if(tempG>255)
						tempG=255;

					///
					tempB=
						*(pRealData+pit*(y-2)+(x-2)*bitCount+2)*M[0][0]+*(pRealData+pit*(y-2)+(x-1)*bitCount+2)*M[0][1]+*(pRealData+pit*(y-2)+(x)*bitCount+2)*M[0][2]+*(pRealData+pit*(y-2)+(x+1)*bitCount+2)*M[0][3]+*(pRealData+pit*(y-2)+(x+2)*bitCount+2)*M[0][4]
					+	*(pRealData+pit*(y-1)+(x-2)*bitCount+2)*M[1][0]+*(pRealData+pit*(y-1)+(x-1)*bitCount+2)*M[1][1]+*(pRealData+pit*(y-1)+(x)*bitCount+2)*M[1][2]+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)*M[1][3]+*(pRealData+pit*(y-1)+(x+2)*bitCount+2)*M[1][4]
					+	*(pRealData+pit*(y)+(x-2)*bitCount+2)*M[2][0]+*(pRealData+pit*(y)+(x-1)*bitCount+2)*M[2][1]+*(pRealData+pit*(y)+(x)*bitCount+2)*M[2][2]+*(pRealData+pit*(y)+(x+1)*bitCount+2)*M[2][3]+*(pRealData+pit*(y)+(x+2)*bitCount+2)*M[2][4]
					+*(pRealData+pit*(y+1)+(x-2)*bitCount+2)*M[3][0]+*(pRealData+pit*(y+1)+(x-1)*bitCount+2)*M[3][1]+*(pRealData+pit*(y+1)+(x)*bitCount+2)*M[3][2]+*(pRealData+pit*(y+1)+(x+1)*bitCount+2)*M[3][3]+*(pRealData+pit*(y+1)+(x+2)*bitCount+2)*M[3][4]	
					+*(pRealData+pit*(y+2)+(x-2)*bitCount+2)*M[4][0]+*(pRealData+pit*(y+2)+(x-1)*bitCount+2)*M[4][1]+*(pRealData+pit*(y+2)+(x)*bitCount+2)*M[4][2]+*(pRealData+pit*(y+2)+(x+1)*bitCount+2)*M[4][3]+*(pRealData+pit*(y+2)+(x+2)*bitCount+2)*M[4][4]
					;
					tempB=abs(tempB);
					if(tempB>255)
						tempB=255;

				}

				*(pRealData2+pit2*y+x*bitCount2)=tempR;
				*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
				*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
			}
		}
		Invalidate();
	}


更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    拉普拉斯锐化(边缘检测)_边缘锐化_Vc_

    总之,拉普拉斯锐化是数字图像处理中一种基本的边缘检测技术,通过在Visual C++中实现这一算法,我们可以对图像进行边缘检测,从而提取出图像的重要结构信息。理解并掌握这一技术对于深入学习图像处理和计算机视觉至...

    拉普拉斯锐化(边缘检测)_拉普拉斯_Vc_

    拉普拉斯算子是一种二阶导数算子,它通过计算图像像素的邻域内灰度值的变化率来检测边缘。在二维图像中,拉普拉斯算子通常表示为一个3x3的掩模,其元素如下: ``` 0 1 0 1 -4 1 0 1 0 ``` 拉普拉斯算子对每个像素...

    VC图像处理 锐化及边缘检测

    通过实际操作和实践,你将能够熟练地在VC中实现图像的锐化和边缘检测,为后续更复杂的图像处理任务打下坚实的基础。 总的来说,图像处理中的锐化和边缘检测是基础但至关重要的技术,它们在很多领域都有着广泛的应用...

    VC的锐化及边缘检测

    这些代码可能涵盖了如何应用上述算子进行图像处理,包括读取图像、应用滤波器、检测边缘以及显示结果等步骤。通过这些代码,您可以理解算法的工作流程,同时也能动手实践,加深理解。 锐化和边缘检测在许多领域都有...

    VC 图像平滑、边缘检测、边缘增强、锐化、腐蚀、开运算等

    在图像处理领域,VC(Visual C++)是一种常用的编程环境,可以用来实现各种图像操作,如图像平滑、边缘检测、边缘增强、锐化、腐蚀和开运算等。这些技术在计算机视觉、图像分析和模式识别中都有着广泛的应用。下面...

    图像处理VC程序\.实现图象平滑(去噪声),锐化算法的源代码

    例如,可以使用`GaussianBlur`函数实现高斯滤波,使用`Laplacian`函数进行拉普拉斯锐化,或者使用`Sobel`函数实现索贝尔算子。 在项目中,源代码可能会包含以下几个关键部分: 1. 图像读取:使用OpenCV的`imread`...

    VC图像处理源程序大全

    拉普拉斯锐化(边缘检测).rar 方块编码.rar 梯度锐化.rar 灰度均衡.rar 用Canny算子提取边缘.rar 直方图均衡.rar 离散余弦变换.rar 维纳滤波处理.rar 逆滤波处理.rar 阈值变换.rar 高斯平滑.rar

    数字图像的一些基本操作用VC实现

    拉普拉斯锐化是利用拉普拉斯算子进行图像增强的一种技术。拉普拉斯算子是对图像进行二阶导数运算,能有效地检测图像的边缘和细节,通过对其结果进行适当阈值处理,可以达到锐化图像的效果。 最后,亮度增减是直接...

    VC实现数字图像处理的源程序

    例如,可以使用高斯滤波器去除噪声,使用拉普拉斯算子进行边缘检测。 3. 图像变换:包括灰度变换、直方图均衡化、傅里叶变换等。灰度变换可以改变图像的亮度和对比度;直方图均衡化能增强图像的对比度;傅里叶变换...

    图像处理基本算法 VC实现

    9. **拉普拉斯锐化**:拉普拉斯算子是一种检测图像边缘的算子,它对图像进行二阶微分运算,可以突出边缘,但可能引入噪声。锐化可以通过将拉普拉斯结果与原图相加来实现。 10. **边缘检测**:边缘检测是图像分析的...

    图像的增强处理 VC opencv

    在这个“图像的增强处理 VC opencv”主题中,我们将深入探讨如何使用OpenCV库在Visual C++环境下进行图像增强操作,主要包括图像平滑、中值滤波以及拉普拉斯锐化。 首先,我们来了解图像平滑。图像平滑,又称为图像...

    图像缩放毕业设计VC实现源代码

    例如,高斯模糊可以降低噪声,中值滤波器可以有效去除椒盐噪声,而拉普拉斯锐化可以增强图像边缘。 5. 几何变换:除了平移和旋转,还包括仿射变换、透视变换等,用于将图像从一个几何空间转换到另一个,如扭曲、...

    vc数字图像处理基础教程

    考虑到噪声点可能对边沿检测产生干扰,高斯拉普拉斯算子通过结合高斯平滑和拉普拉斯锐化,先平滑图像以消除噪声,然后进行边沿检测,从而提供更好的效果。5x5的LOG模板和其位置加权系数关系曲线类似墨西哥草帽,故...

    VC++如何实现图像的锐化效果

    当然,实际应用中可能需要根据具体需求调整滤波器的参数,例如改变高斯核的标准差以控制模糊程度,或者调整拉普拉斯核的权重以改变边缘检测的敏感性。此外,还可以结合其他图像处理技术,如噪声去除、直方图均衡化等...

    whu_7-115-14828-7_2006_1.rar_vc hough_walsh滤波

    30个图像处理的VC++ 源代码,包括256色转灰度图,Hough变换,image_j1,PCA,Walsh变换,对比度拉伸,二值化变换,反色, 方块编码,傅立叶变换,高斯平滑,灰度均衡,均值滤波,拉普拉斯锐化(边缘检测), 离散余弦变换,亮度增减...

    VC实现的基本图像处理

    注意,本目录中大部分程序只能对256色图像进行操作。 对比度拉伸 二值化 变换反色 亮度增减 取对数取指数 直方图均衡 阈值变换 图像镜像 图像平移 ...拉普拉斯锐化(边缘检测) 离散余弦变换 Walsh变换 维纳滤波处理

    几种图像处理的VC源代码

    4. **拉普拉斯锐化(边缘检测)**:拉普拉斯算子是一种微分算子,用于检测图像的边缘。它是二阶导数的一种表示,能够突出图像中像素强度变化大的区域,即图像边缘。在VC++中,拉普拉斯锐化通常涉及计算图像的梯度和...

    Visual c++数字图像处理典型算法及实例源代码

    源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘...

    如何用vc实现图像处理

    在图像处理领域,VC++(Visual C++)是一种...通过学习和掌握这些技术,可以实现从边缘检测到模板匹配等一系列复杂的图像处理任务。在实际项目中,开发者需要根据需求选择合适的算法和优化策略,以达到最佳的处理效果。

    图像处理VC算法实现

    锐化使用拉普拉斯算子或高斯差分算子来突出边缘;去噪则常采用中值滤波器或高斯滤波器消除椒盐噪声或高斯噪声。 3. **图像恢复**:恢复图像的原始信息,如逆滤波、自适应滤波等方法,用于修复失真或降质的图像。 4...

Global site tag (gtag.js) - Google Analytics