数字图像处理,图像锐化算法的C++实现

http://blog.csdn.net/ebowtang/article/details/38961399

之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊。 今天我们反其道行之, 我们看看锐化是怎么做的。 这里的锐化, 还是的从平滑谈开去。我们先来观察原来的图像和平滑图像的区别:

原图 raw:

模糊图 blur:

_________________________________________________________

源图像减去模糊图像等于 锐化后的边缘mask效果:

这个时候, 我们发现,减法做完的这个图赫然勾勒出了原图的边缘!! 这样给我们一个启示就是, 如果我们把这个mask加到原图上那岂不就是锐化了? (不明白? 锐化的意思就是边缘的色差比较大, 产生的图片貌似清晰的效果) 说干就干, 马上我们来做个新的算式:

老图 raw:

加上mask

_______________________________________________________

等于锐化图  sharpen

怎么样, 是不是有了锐化的效果了??所以我们实际上的锐化效果就是从这么简单的想法衍生出来的。 所以锐化的公式可以简单的表述为 sharp = raw + ( raw-blur ); 再来看看我们原来的高斯模版的话就是这样:

这样的话, 我们的锐化算法,也变得和之前的高斯平滑差不多了, 就是像素的加权平均值的计算就可以得到了。可以想见的事情是代码肯定也会出奇的一致! 这是那个template改掉了:

[html] view plain copy

print?

  1. void sharpenImage  (unsigned char* gray, unsigned char* smooth, int width, int height)
  2. {
  3. int templates[25] = { -1, -4, -7, -4, -1,
  4. -4, -16, -26, -16, -4,
  5. -7, -26, 505, -26, -7,
  6. -4, -16, -26, -16, -4,
  7. -1, -4, -7, -4, -1 };
  8. memcpy ( smooth, gray, width*height*sizeof(unsigned char) );
  9. for (int j=2;j<height-2;j++)
  10. {
  11. for (int i=2;i<width-2;i++)
  12. {
  13. int sum = 0;
  14. int index = 0;
  15. for ( int m=j-2; m<j+3; m++)
  16. {
  17. for (int n=i-2; n<i+3; n++)
  18. {
  19. sum += gray [ m*width + n] * templates[index++] ;
  20. }
  21. }
  22. sum /= 273;
  23. if (sum > 255)
  24. sum = 255;
  25. if (sum <0)
  26. sum = 0;
  27. smooth [ j*width+i ] = sum;
  28. }
  29. }
  30. }

当然, 这个锐化算法或者说锐化的模板只是我根据前面的算式自己计算的来的,其实还是有非常主流的锐化模版可以供使用的, 比如说著名的拉普拉斯算子。

参考资源:

【1】http://blog.csdn.NET/hhygcy/article/details/4330939

时间: 2024-12-28 09:45:44

数字图像处理,图像锐化算法的C++实现的相关文章

数字图像处理——图像的几何变换

数字图像处理--图像的几何变换 几何变换不改变像素值,而是改变像素所在的位置. 它包括两个独立的算法: 空间变换算法 插值算法 分类 从图像类型上 二维图像 三维图像 从三维到二维平面投影变换 从变换的性质 基本变换:平移,比例缩放,旋转,镜像,错切 复合变换 图像的平移 在同一坐标系下,设\(P_0(x_0,y_0)\) ,经过水平偏移量\(\triangle x\) ,垂直偏移量\(\triangle y\),得到平移之后的坐标: \[ \begin{cases} x = x_0 + \tr

图像算法---基于局部均值的锐化算法研究

图像锐化算法是图像处理中经常用到的基础算法,在Photoshop中,使用的是USM锐化,但是这种锐化速度比较慢,今天,介绍一种很简单的锐化算法:基于均值滤波的锐化算法. 本文要介绍的这个算法,来源于论文<Digital image enhancement and noise fitering by using local statistics>. 算法过程如下: 1,计算窗口范围内的均值: 其中公式(1)为均值计算公式 ,公式(2)为方差计算公式,公式(2)暂时没有用到. 2,锐化公式: 2.

数字图像处理 第三版 第一章笔记

1. 数字图像和数字图像处理 图像可定义为一个函数,其自变量是坐标,因变量是灰度值. 当自变量和因变量全是离散值时,则称该图像是数字图像. 数字图像由有限数量的元素组成,这些元素成为像素,每个像素都有特定的位置和灰度值. 数字图像处理是指借助数字计算机来处理数字图像. 从图像处理到计算机视觉是一个连续的统一体. 典型地,将统一体分为三种计算处理,即初级.中级和高级. (1)低级处理涉及初级操作,如降噪.增强.锐化.输入输出都是图像. (2)中级处理涉及诸多任务,如分割.分类和识别等.输入为图像,

数字图像处理学习笔记之一 DIP绪论与MATLAB基础

写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同时学习过程中会参考网络学习资源.对于数字图像处理的学习不可能仅仅依靠作者所写的这一系列笔记,而是需要花时间和精力学习,本文只可作参考和交流之用.由于涉及此学科不久,在学习过程中难免存在错误,请读者不吝赐教. 数字图像处理绪论 数字图像处理(DIP)的研究目标和处理对象: DIP的研究目标是获取信息,处理对象是

【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图像增强处理,包括图像普通平滑.高斯平滑.不同算子的图像锐化知识.希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处理]三.MFC实现图像灰度.采样和量化功能详解 [数字图像处理]四.MFC对话框绘制灰度直方图 [数字图像

Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法

原文:Win8 Metro(C#)数字图像处理--2.51图像统计滤波算法 ?? [函数名称] ??图像统计滤波???WriteableBitmap?StatisticalFilter(WriteableBitmap?src,double?T) /// <summary> /// Statistical filtering process. /// </summary> /// <param name="src">The source image.&

【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换.灰度非线性变换.图像阈值化处理.图像均衡化处理等知识,并结合前一篇论文灰度直方图进行展示 .同一时候文章比較具体基础,希望该篇文章对你有所帮助,尤其是刚開始学习的人和学习图像处理的学生. [数字图像处理]一.MFC具体解释显示BMP格式图片 [数字图像处理]二.MFC单文档切割窗体显示图片 [数字图像处理]

【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP图片空间几何变换,包括图像平移.图形旋转.图像反转倒置镜像和图像缩放的知识.同时文章比较详细基础,没有采用GDI+获取矩阵,而是通过读取BMP图片信息头和矩阵像素实现变换,希望该篇文章对你有所帮助,尤其是初学者和学习图像处理的学生. [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 [数字图像处

【数字图像处理】三.MFC实现图像灰度、采样和量化功能详解

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行讲解,主要通过MFC单文档视图实现显示BMP格式图片,并通过Bitmap进行灰度处理.图片采样和量化功能. 个人认为对初学者VC++6.0可能还是很值得学习的工具,所以采用它来讲解,而不是VS或C#.同时文章比较详细基础,希望该篇文章对你有所帮助~ [数字图像处理]一.MFC详解显示BMP格式图片 [数字图像处理]二.MFC单文档分割窗口显示图片 免费资源下载地址: http://dow