void CSDIELSView::OnSharpeningLaplace()
{
//程序编制:李立宗 lilizong@gmail.com
//2012-8-11
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;
int tempX,tempY;
int temp;
//int M[3][3]={{1,2,1},{2,4,2},{1,2,1}};
int t=100; //门限
// tempR=tempG=tempG=0;
//说明:将生产的图像作为24位图处理。
for (int y=1; y<maxY-1; y++) {
for (int x=1; x<maxX-1; x++) {
temp=
*(pRealData+pit*(y-1)+(x-1)*bitCount)+*(pRealData+pit*(y-1)+(x)*bitCount)+*(pRealData+pit*(y-1)+(x+1)*bitCount)
+*(pRealData+pit*(y)+(x-1)*bitCount)-8*(*(pRealData+pit*(y)+(x)*bitCount))+*(pRealData+pit*(y)+(x+1)*bitCount)
+*(pRealData+pit*(y+1)+(x-1)*bitCount)+*(pRealData+pit*(y+1)+(x)*bitCount)+*(pRealData+pit*(y+1)+(x+1)*bitCount);
temp=abs(temp);
if(temp>255)
tempR=255;
else
tempR=temp;
if(bitCount==1)
{
tempG=tempR;
tempB=tempR;
}
else
{
temp=
*(pRealData+pit*(y-1)+(x-1)*bitCount+1)+*(pRealData+pit*(y-1)+(x)*bitCount+1)+*(pRealData+pit*(y-1)+(x+1)*bitCount+1)
+*(pRealData+pit*(y)+(x-1)*bitCount+1)-8*(*(pRealData+pit*(y)+(x)*bitCount+1))+*(pRealData+pit*(y)+(x+1)*bitCount+1)
+*(pRealData+pit*(y+1)+(x-1)*bitCount+1)+*(pRealData+pit*(y+1)+(x)*bitCount+1)+*(pRealData+pit*(y+1)+(x+1)*bitCount+1);
temp=abs(temp);
if(temp>255)
tempG=255;
else
tempG=temp;
temp=
*(pRealData+pit*(y-1)+(x-1)*bitCount+2)+*(pRealData+pit*(y-1)+(x)*bitCount+2)+*(pRealData+pit*(y-1)+(x+1)*bitCount+2)
+*(pRealData+pit*(y)+(x-1)*bitCount+2)-8*(*(pRealData+pit*(y)+(x)*bitCount+2))+*(pRealData+pit*(y)+(x+1)*bitCount+2)
+*(pRealData+pit*(y+1)+(x-1)*bitCount+2)+*(pRealData+pit*(y+1)+(x)*bitCount+2)+*(pRealData+pit*(y+1)+(x+1)*bitCount+2);
temp=abs(temp);
if(temp>255)
tempB=255;
else
tempB=temp;
}
*(pRealData2+pit2*y+x*bitCount2)=tempR;
*(pRealData2+pit2*y+x*bitCount2+1)=tempG;
*(pRealData2+pit2*y+x*bitCount2+2)=tempB;
}
}
Invalidate();
}
分享到:
相关推荐
在本项目中,我们关注的是使用C++(Vc)实现图像锐化的功能。以下将详细介绍图像锐化的基本原理、常用的锐化算法以及如何在C++中实现这一过程。 **图像锐化的原理** 图像锐化主要通过突出图像中的高频信息来实现。...
在压缩包中的"拉普拉斯锐化(边缘检测)"文件很可能是实现了以上步骤的源代码。源码可能包含了OpenCV库的引用,因为它是处理图像任务的标准库,提供了丰富的图像处理函数。 边缘检测对于图像分析有多种应用,包括...
在上述代码中,`originalImage`是原始图像,`laplacianImage`是输出的拉普拉斯锐化后的图像,`-1`表示自动选择合适的深度,`kernel`是拉普拉斯核。 最后,我们可能还需要进行后处理,比如非极大值抑制和双边滤波,...
首先,我们来理解什么是图像锐化。锐化是增强图像边缘和细节的过程,通常用于提高图像的清晰度。在图像处理中,我们可以通过应用滤波器来实现这一目的。例如,可以使用拉普拉斯算子或高斯差分算子。拉普拉斯算子是一...
拉普拉斯锐化是一种在计算机视觉和图像处理领域中用于边缘检测和图像增强的技术。它基于拉普拉斯算子,这是一种二阶微分算子,能够检测图像中的边缘和突变区域。在VC++中,我们可以利用OpenCV库或者自定义的算法来...
3. 图像滤波:包括平滑滤波(如均值滤波、高斯滤波)和锐化滤波(如拉普拉斯算子、索贝尔算子),用于去除噪声和增强图像边缘。 4. 图像变换:如傅里叶变换、离散余弦变换,用于频域分析和图像增强。 5. 图像分割...
总的来说,VC++图片锐化源代码实例是一个很好的学习资源,可以帮助你深入理解数字图像处理和计算机视觉的概念。在实践中,你可以根据需求调整参数,优化算法,以适应不同的应用场景。记住,理解和掌握这些基础知识...
在给定的“几种图像处理的VC源代码”中,我们涵盖了几个关键的图像处理算法,这些算法都是用C++语言实现,并且基于Visual C++(VC++)环境。下面我们将详细介绍每个算法及其在图像处理中的应用。 1. **高斯平滑**:...
接下来是图像锐化算法。锐化处理是为了突出图像中的边缘和细节,使图像看起来更清晰。常用的锐化方法包括拉普拉斯算子、索贝尔算子、罗伯特算子等。拉普拉斯算子是一种二阶微分算子,它能够检测图像的边缘,但可能会...
上述代码中,`cv::Laplacian`函数用于应用拉普拉斯算子,`convertTo`用于数据类型转换,`add`函数用于合并原图像和拉普拉斯结果以得到锐化效果。 **注意事项** 1. 在实际应用中,可能需要根据图像的特性调整...
4. 图像滤波:包括平滑滤波(如高斯滤波)和锐化滤波(如拉普拉斯滤波),用于去除噪声或增强边缘。 5. 边缘检测:如Canny、Sobel或Prewitt算法,用于识别图像中的边界。 6. 特征提取:如直方图均衡化、角点检测、...
在图像锐化中,我们通常使用一个称为拉普拉斯算子或高通滤波器的内核。例如,一个简单的3x3拉普拉斯内核可能是: ``` [0 -1 0] [-1 4 -1] [0 -1 0] ``` 这个内核会强化图像中的边缘,因为边缘处像素值变化较大,而...
接着,我们讨论“图像锐化”。锐化是提高图像对比度,使图像边缘更加清晰的过程。在描述中提到的“Roberts”和“Laplacian”是两种常用的锐化方法。 Roberts交叉差分是一种简单的边缘检测算法,它利用两个45度偏置...
3. **图像滤波**:包括平滑滤波(如均值滤波、高斯滤波)和锐化滤波(如拉普拉斯算子、Sobel算子)。这些操作可以消除噪声,增强边缘,或者模糊图像。 4. **图像阈值分割**:通过设定阈值,将图像二值化,常用于...
在图像处理领域,VC(Visual C++)是一种常用的编程环境,可以用来实现各种图像操作,如图像平滑、边缘检测、边缘增强、锐化、腐蚀和开运算等。这些技术在计算机视觉、图像分析和模式识别中都有着广泛的应用。下面...
下面我们将详细探讨这两种算子以及它们在图像锐化中的应用。 首先,拉普拉斯算子是一种无偏微分算子,常用于检测图像中的边缘。它的2D形式是由四个二阶导数构成的,即对图像在水平和垂直方向上进行两次差分。在彩色...
图像锐化是提高图像边缘对比度的过程,使得图像看起来更清晰。常见的锐化方法有拉普拉斯算子和 Sobel 算子。在VC++中,可以构建这些算子的卷积核,并对图像进行卷积运算来实现锐化。例如,拉普拉斯算子可以检测图像...
在数字图像处理中,图像锐化是一种常见的技术,用于增强图像的边缘和细节,使其更加清晰。在VC++中,我们可以利用OpenCV这样的库来实现图像锐化效果。本文将详细探讨如何通过VC++和OpenCV来实现这一过程。 首先,...
在《Visual C++数字图像处理开发入门与编程实践》这本书中,作者可能详细讲解了以上各个知识点,并提供了相应的VC代码实例。通过学习这些代码,读者可以掌握如何在VC环境中应用这些图像处理技术。解压提供的"VC图像...