数字图像处理,图像锐化算法的C++实现
http://blog.csdn.net/ebowtang/article/details/38961399
之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊。 今天我们反其道行之, 我们看看锐化是怎么做的。 这里的锐化, 还是的从平滑谈开去。我们先来观察原来的图像和平滑图像的区别:
原图 raw:

模糊图 blur:

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

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

加上mask

_______________________________________________________
等于锐化图 sharpen

怎么样, 是不是有了锐化的效果了??所以我们实际上的锐化效果就是从这么简单的想法衍生出来的。 所以锐化的公式可以简单的表述为 sharp = raw + ( raw-blur ); 再来看看我们原来的高斯模版的话就是这样:
这样的话, 我们的锐化算法,也变得和之前的高斯平滑差不多了, 就是像素的加权平均值的计算就可以得到了。可以想见的事情是代码肯定也会出奇的一致! 这是那个template改掉了:
- void sharpenImage (unsigned char* gray, unsigned char* smooth, int width, int height)
- {
- int templates[25] = { -1, -4, -7, -4, -1,
- -4, -16, -26, -16, -4,
- -7, -26, 505, -26, -7,
- -4, -16, -26, -16, -4,
- -1, -4, -7, -4, -1 };
- memcpy ( smooth, gray, width*height*sizeof(unsigned char) );
- for (int j=2;j<height-2;j++)
- {
- for (int i=2;i<width-2;i++)
- {
- int sum = 0;
- int index = 0;
- for ( int m=j-2; m<j+3; m++)
- {
- for (int n=i-2; n<i+3; n++)
- {
- sum += gray [ m*width + n] * templates[index++] ;
- }
- }
- sum /= 273;
- if (sum > 255)
- sum = 255;
- if (sum <0)
- sum = 0;
- smooth [ j*width+i ] = sum;
- }
- }
- }
当然, 这个锐化算法或者说锐化的模板只是我根据前面的算式自己计算的来的,其实还是有非常主流的锐化模版可以供使用的, 比如说著名的拉普拉斯算子。
参考资源:
【1】http://blog.csdn.NET/hhygcy/article/details/4330939
数字图像处理,图像锐化算法的C++实现的更多相关文章
- Win8 Metro(C#)数字图像处理--2.66FloodFill算法
原文:Win8 Metro(C#)数字图像处理--2.66FloodFill算法 [函数名称] 洪水填充算法函数 WriteableBitmap FloodfillProcess(Write ...
- 数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化
直方图均匀化 任务:用MATLAB或VC或Delphi等实现图像直方图均匀化的算法. clc;clear;close all; % 清除工作台 % path(path,'..\pics'); % 设置 ...
- 数字图像处理学习笔记之一 DIP绪论与MATLAB基础
写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...
- Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法
原文:Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法 [函数名称] 高斯平滑滤波器 GaussFilter(WriteableBitmap src,int r ...
- Win8 Metro(C#)数字图像处理--2.44图像油画效果算法
原文:Win8 Metro(C#)数字图像处理--2.44图像油画效果算法 [函数名称] 图像油画效果 OilpaintingProcess(WriteableBitmap src ...
- Win8 Metro(C#)数字图像处理--2.45图像雾化效果算法
原文:Win8 Metro(C#)数字图像处理--2.45图像雾化效果算法 [函数名称] 图像雾化 AtomizationProcess(WriteableBitmap src,i ...
- Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
原文:Win8 Metro(C#)数字图像处理--2.42图像光照效果算法 [函数名称] 图像光照效果 SunlightProcess(WriteableBitmap src,int X,in ...
- Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法
原文:Win8 Metro(C#)数字图像处理--2.43图像马赛克效果算法 [函数名称] 图像马赛克效果 MosaicProcess(WriteableBitmap src, i ...
- Win8Metro(C#)数字图像处理--2.11图像锐化
原文:Win8Metro(C#)数字图像处理--2.11图像锐化 [函数名称] 图像锐化函数SharpeningProcess(WriteableBitmap src,double sharpe ...
随机推荐
- 网页端的utf8和gb2312 之间关于osd 传参数的乱码问题
(0)HZK16 点阵字库原理及实现 (1)utf8 和 unicode gb2312之间的转换 (2)gb2312 的拓展 gbk 实现了更多的文字编码 像“瞭望塔”的瞭子在gb2312中是没有的 ...
- 关于C# wpf DataGrid单元格双击设置单元格内容
1.我是使用了 visual stadio 2015, 用的C# WPF写个工具,但是发现wpf原生没有涉及表格的东西(类似 winform·的DataGridView),所以使用的是toolkit工 ...
- CFontDialog学习
void CMfcFontDlgDlg::OnBtnFont() { // Show the font dialog with all the default settings. CFontDialo ...
- iOS --转载 NSRange 和 NSString 详解
一.NSRange 1.NSRange的介绍 NSRange是Foundation框架中比较常用的结构体, 它的定义如下: typedef struct _NSRange { NSUInteger l ...
- 面试心得与总结—BAT、网易、蘑菇街 - ImportNew
1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 3. equals与==的区别. 4. Object有哪些公用方法? 5. Java的四种引用,强弱软虚 ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.2——使用Android Testing Support Library进行测试
问题: 你想要测试app的Android组件. 解决方案: 使用新的测试类实现JUnit风格的测试. 讨论: 测试像activities,services等的Android组件,需要将app部署到连接 ...
- hdu1814(2-SAT)
2-SAT 求出可能的解,但是这个解要是字典序最小的,所以只能采用2-SAT基本思想来解. 从小到大开始,对一个可能的点染色,染为1,然后dfs其所有能到达的点,如果其中出现一个已经标号为-1的话,那 ...
- 使用sendmail来发邮件
安装sendEmail sendEmail是一个免费.轻量级.命令行的SMTP邮件客户端. 如果你需要使用命令行方式发送邮件,那么sendEmail是非常完美的选择:使用简单.功能强大. wget - ...
- Windows如何使用Apache的ab工具进行网站性能测试(Apache服务器自带了ab压力测试工具,可以用来测试网站性能,使用简单方便)
打开Apache服务器的安装路径,在bin目录中有一个ab.exe的可执行程序,就是我们要介绍的压力测试工具. 在Windows系统的命令行下,进入ab.exe程序所在目录,执行ab.exe程序.注意 ...
- C# 利用StringBuilder提升字符串拼接性能
一个项目中有数据图表呈现,数据量稍大时显得很慢. 用Stopwatch分段监控了一下,发现耗时最多的函数是SaveToExcel 此函数中遍列所有数据行,通过Replace替换标签生成Excel行,然 ...