`

高斯拉普拉斯锐化(边缘检测)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图像处理源程序大全

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

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

    关于数字图像处理的一些基本代码,BMPViewer,hough变化,Sobel算子边缘检测算法,差影法.高斯平滑处理,灰度均衡,灰度拉伸,灰度阈值变换,拉普拉斯锐化,亮度增减

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

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

    VC实现的基本图像处理

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

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

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

    几种图像处理的VC源代码

    这里包括几种比较好的图像处理的VC源代码,包括:维纳滤波,Hough变换,阈值变换,高斯平滑与拉普拉斯锐化.

    有关图像处理的源程序

    256色转换灰度图、对比度拉伸、二值化变换、反色、亮度增减、取对数、取指数、直方图均衡、灰度均衡、阀值变换、图像镜像、图像平移、图像缩放、图像旋转、高斯平滑、均值滤波、拉普拉斯锐化、梯度锐化、中值滤波、...

    MFC + OpenCV图像处理

    用OpenCV实现的图像处理软件,实现了 图像信息(直方图,灰度图)图像的几何变换(放缩,翻转,旋转)图像增强(直方图均衡化,拉普拉斯锐化,高斯低通滤波,霍夫变换)图像复原(加噪去噪)图像分割(边缘检测,...

    VC图像处理软件

    包括Wash变换,将256色图像转为灰度图,高斯平滑,对比度拉伸,二值化,反色,方块编码,Fourier变换,均值滤波,拉普拉斯锐化,DCT变换,亮度增减,梯度锐化,图像镜像,图像平移,图像缩放,图像细化,图像旋转,...

    shuzituxiangchuli.rar_DCT直方图_VB均衡化_二值化 局部_拉普拉斯算子_滤波matlab

    作业一 要求 用C语言或者VC,VB,Matlab或其他语言完成如下实验: 1)打开一个BMP文件 2)将其局部区域的灰度值进行改变 ...打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。

    《Visual C++数字图像处理开发入门与编程实践》源码

    11.5.2 图像拉普拉斯锐化的原理 452 11.5.3 图像拉普拉斯锐化的 算法实现 453 11.6 Sobel边缘细化 457 11.6.1 Sobel边缘细化的原理 457 11.6.2 Sobel边缘细化的 编程实现 459 11.7 本章小节 464 第12章 常见滤镜效果...

    图像处理程序大全

    ............\拉普拉斯锐化(边缘检测).rar ............\方块编码.rar ............\梯度锐化.rar ............\灰度均衡.rar ............\用Canny算子提取边缘.rar ............\直方图均衡.rar ...........

    vc++ 应用源码包_6

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 应用源码包_1

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_2

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_3

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 开发实例源码包

    ----------VC应用开发 [Visual.C..编程技巧精选500例]源代码. 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件...

    vc++ 应用源码包_5

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    MYGUI.rar_VB Sobel_哈夫曼 图像_模板匹配_灰度值

    打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。 第五章作业 编写一个程序,对输入的图像进行哈夫曼编码,显示原图像的熵、编码后的平均码字长度、并能够根据编码重建出图像。 在...

    简易图像处理软件

    // cvNamedWindow("高斯滤波",1); // cvShowImage("高斯滤波",out); ShowImage( out,IDC_STATIC_P ); wImg=cvCreateImage(cvGetSize(out),out-&gt;depth,out-&gt;nChannels); cvCopy(out,wImg,NULL); cvWaitKey(0); ...

Global site tag (gtag.js) - Google Analytics