数字图像处理,图像锐化算法的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 ...
随机推荐
- express搭建权限管理系统
express搭建权限管理系统 权限管理,是管理系统中的常见组件.通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现. 初衷: 使用express开发过的项目大大小小加在一起也有 ...
- Chem 3D模型的参数值更改方法
在化学绘图软件ChemOffice 15.1中有个专门用于绘制三维结构的组件,就是Chem 3D.通过这个组件用户可以绘制3D模型并可以通过这个组件来计算一些化学数据.在使用Chem 3D组件过程中, ...
- python 解析 XML文件
如下使用xml.etree.ElementTree模块来解析XML文件.ElementTree模块中提供了两个类用来完成这个目的: ElementTree表示整个XML文件(一个树形结构) Eleme ...
- 【转】 JS实现HTML标签转义及反转义
原文地址:http://blog.600km.xyz/2015/12/15/js-encode-html-tags/ 简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中 ...
- Windows(7)上那些好用的软件及优化技巧(原创)
*本文为原创内容,转载请注明作者和出处:www.cnblogs.com/wang1024 软件篇 注:以下软件在百度直接搜索软件名均可找到官网,直接官网下载即可 大众的软件哪个好: 杀毒软件专题 基于 ...
- SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 4)
(六)高效合理的使用LINQ 1.DataContext中的两个属性 为了能够使用DataContext进行数据提交,在DataContext进行数据查询和操作的过程中,内部会进行数据状态的保持和追踪 ...
- [cocos2dx] cocosdx编译工程那些事
cocos compile -p android 上面这条命令可以将cocos2dx的工程编译出android apk,需要注意的是如果有新增的cpp文件,都需要在“CocosProject\proj ...
- Storm-源码分析- bolt (backtype.storm.task)
Bolt关键的接口为execute, Tuple的真正处理逻辑, 通过OutputCollector.emit发出新的tuples, 调用ack或fail处理的tuple /** * An IBolt ...
- GetWindowThreadProcessId
函数功能:该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的. 函数原型:DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpd ...
- junit test 报错,java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=esopCreateTest],
java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=esopCreateTest], {ExactMatc ...