图像编程学习笔记9——图像的锐化

简介: 锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high passfilter)。锐化处理在增强图象边缘的同时增加了图象的噪声。 常用的锐化模板是拉普拉斯(Laplacian)模板(见(3.4)式),又是个数学家的名字,可见学好数学,走遍天下都不怕。

锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high passfilter)。锐化处理在增强图象边缘的同时增加了图象的噪声。

常用的锐化模板是拉普拉斯(Laplacian)模板(见(3.4)式),又是个数学家的名字,可见学好数学,走遍天下都不怕。

 

(3.4)

容易看出拉普拉斯模板的作法:先将自身与周围的8个象素相减,表示自身与周围象素的差别;再将这个差别加上自身作为新象素的灰度。可见,如果一片暗区出现了一个亮点,那么锐化处理的结果是这个亮点变得更亮,增加了图象的噪声。

因为图象中的边缘就是那些灰度发生跳变的区域,所以锐化模板在边缘检测中很有用,这一点将在后面详细介绍。

功能实现code:

 

[cpp]  view plain copy
 
  1. /** 
  2. * 函数名: sharpening 
  3. * 功  能: 对图像进行锐化处理 
  4. */  
  5. void Laplacian()  
  6. {  
  7.     int temp[9] = {-1,-1,-1,-1,9,-1,-1,-1,-1};   //Laplacian 模版  
  8.     int height = bmpInfoHeader.biHeight;     
  9.     int width = bmpInfoHeader.biWidth;    
  10.     int imgSize = bmpInfoHeader.biSizeImage;  
  11.     int lineByte = (width * 8 +31) / 32 * 4;  //每行像素所占字节数  
  12.     //处理是基于原图的,所以原图的数据不能改变,用pNewBmpData存储改变之后的数据  
  13.     memcpy(pNewBmpData,pBmpData,imgSize);   //把原图数据复制给pNewBmpData  
  14.     //注意边界点不处理,所以i从1到高度-2,j类似  
  15.     double temResult;  //中间结果  
  16.     for(int i = 1; i < height - 1; i++ )  
  17.     {  
  18.         for(int j = 1; j < width - 1; j++ )  
  19.         {  
  20.             temResult = (double)(*(pBmpData + (i-1) * lineByte + j - 1) * temp[0]);  
  21.             temResult += (double)(*(pBmpData + (i-1) * lineByte + j) * temp[1]);  
  22.             temResult += (double)(*(pBmpData + (i-1) * lineByte + j + 1) * temp[2]);  
  23.             temResult += (double)(*(pBmpData + (i) * lineByte + j - 1) * temp[3]);  
  24.             temResult += (double)(*(pBmpData + (i) * lineByte + j) * temp[4]);  
  25.             temResult += (double)(*(pBmpData + (i) * lineByte + j + 1) * temp[5]);  
  26.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j - 1) * temp[6]);  
  27.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j) * temp[7]);  
  28.             temResult += (double)(*(pBmpData + (i+1) * lineByte + j + 1) * temp[8]);  
  29.             *(pNewBmpData + i * lineByte + j) = temResult;  
  30.         }  
  31.     }  
  32. }  
目录
相关文章
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
12月前
|
机器学习/深度学习 数据采集 自然语言处理
使用Python实现深度学习模型:智能社交媒体内容分析
使用Python实现深度学习模型:智能社交媒体内容分析
1005 69
|
11月前
|
Java Maven Android开发
eclipse搭建springboot项目
本文介绍了如何使用Spring Initializr官网生成Spring Boot项目并用Eclipse打开和运行该项目,包括配置项目信息、添加依赖、下载依赖以及启动项目的步骤。
718 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的在线作业管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
169 4
|
安全 关系型数据库 应用服务中间件
连接rds设置网络权限
连接阿里云RDS需关注:1) 设置白名单,允许特定IP访问;2) 选择合适网络类型,如VPC或经典网络;3) 确保VPC内路由与安全组规则正确;4) 同VPC内可使用内网地址连接;5) 可启用SSL/TLS加密增强安全性。记得遵循最小权限原则,确保数据库安全。不同服务商操作可能有差异,但基本流程相似。
595 9
新版阿里云内容安全对接
新版阿里云内容安全对接
397 1
|
XML Java 数据库连接
初识Spring -- Spring快速入门保姆级教程(一)(1)
初识Spring -- Spring快速入门保姆级教程(一)
730 0
|
数据安全/隐私保护 Swift
Swift实用小册26: 正则表达式的使用
在本章中,你将学会常用的正则表达式的使用方法。
354 3
Swift实用小册26: 正则表达式的使用
|
弹性计算 负载均衡
再聊负载均衡SLB的主备可用区和高可用部署最佳实践
1.概述 阿里云负载均衡SLB的主备可用区提供了多个层级的高可用,可阅读《负载均衡SLB高可用的四个层次》。很多用户常常在下单选购时,对可用区的选择感到困惑。到底如何选择SLB的主备可用区,如何搭配不同可用区的ECS,来构建高可靠应用系统呢?针对这个问题我们来仔细的聊一聊。
7050 0