高斯拉普拉斯锐化(边缘检测)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
分享到:
相关推荐
拉普拉斯锐化(边缘检测).rar 方块编码.rar 梯度锐化.rar 灰度均衡.rar 用Canny算子提取边缘.rar 直方图均衡.rar 离散余弦变换.rar 维纳滤波处理.rar 逆滤波处理.rar 阈值变换.rar 高斯平滑.rar
关于数字图像处理的一些基本代码,BMPViewer,hough变化,Sobel算子边缘检测算法,差影法.高斯平滑处理,灰度均衡,灰度拉伸,灰度阈值变换,拉普拉斯锐化,亮度增减
30个图像处理的VC++ 源代码,包括256色转灰度图,Hough变换,image_j1,PCA,Walsh变换,对比度拉伸,二值化变换,反色, 方块编码,傅立叶变换,高斯平滑,灰度均衡,均值滤波,拉普拉斯锐化(边缘检测), 离散余弦变换,亮度增减...
注意,本目录中大部分程序只能对256色图像进行操作。 对比度拉伸 二值化 变换反色 亮度增减 取对数取指数 直方图均衡 阈值变换 图像镜像 图像平移 ...拉普拉斯锐化(边缘检测) 离散余弦变换 Walsh变换 维纳滤波处理
源码目录结构图、256色转灰度图、Hough变换、Walsh变换、二值化变换、亮度增减、傅立叶变换、反色、取对数、取指数、图像平移、图像旋转、图像细化、图像缩放、图像镜像、均值滤波、对比度拉伸、拉普拉斯锐化(边缘...
这里包括几种比较好的图像处理的VC源代码,包括:维纳滤波,Hough变换,阈值变换,高斯平滑与拉普拉斯锐化.
256色转换灰度图、对比度拉伸、二值化变换、反色、亮度增减、取对数、取指数、直方图均衡、灰度均衡、阀值变换、图像镜像、图像平移、图像缩放、图像旋转、高斯平滑、均值滤波、拉普拉斯锐化、梯度锐化、中值滤波、...
用OpenCV实现的图像处理软件,实现了 图像信息(直方图,灰度图)图像的几何变换(放缩,翻转,旋转)图像增强(直方图均衡化,拉普拉斯锐化,高斯低通滤波,霍夫变换)图像复原(加噪去噪)图像分割(边缘检测,...
包括Wash变换,将256色图像转为灰度图,高斯平滑,对比度拉伸,二值化,反色,方块编码,Fourier变换,均值滤波,拉普拉斯锐化,DCT变换,亮度增减,梯度锐化,图像镜像,图像平移,图像缩放,图像细化,图像旋转,...
作业一 要求 用C语言或者VC,VB,Matlab或其他语言完成如下实验: 1)打开一个BMP文件 2)将其局部区域的灰度值进行改变 ...打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。
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编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...
利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...
利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...
利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...
----------VC应用开发 [Visual.C..编程技巧精选500例]源代码. 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件...
利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...
打开一幅图像,利用Roberts梯度法、Sobel算子和拉普拉斯算子进行锐化,并比较结果。 第五章作业 编写一个程序,对输入的图像进行哈夫曼编码,显示原图像的熵、编码后的平均码字长度、并能够根据编码重建出图像。 在...
// cvNamedWindow("高斯滤波",1); // cvShowImage("高斯滤波",out); ShowImage( out,IDC_STATIC_P ); wImg=cvCreateImage(cvGetSize(out),out->depth,out->nChannels); cvCopy(out,wImg,NULL); cvWaitKey(0); ...