目录

1. 介绍

2. cv2.normalize() 库函数

3. 代码实现


1. 介绍

从原图减去一副钝化(平滑后)的图像,是20实际30年代以来印刷和出版业一直用来锐化图像的过程。这个过程称为钝化掩蔽,它由三个步骤组成

  1. 模糊原图像
  2. 从原图像减去模糊后的图像(产生的差为模板)
  3. 将模板与原图像相加

假设   表示模糊后的图像,则模板为:

然后将加权的模板与原图像相加:

这里 k 为权值且 k >= 0。

  • 当 k = 1 的时候,它是 钝化掩蔽
  • 当k  > 1 的时候,这过程为 高提升滤波
  • 当 k < 1 的时候, 可以减少钝化模板的贡献

如果可以表示钝化掩蔽的机理:

这里 k 的取值过大的话,那么模板中负值的占比就变大,那么原图与模板相加后就会出现负的灰度值。那么在进行归一化的时候,这些负的像素点就会映射成灰度值很低的暗点

2. cv2.normalize() 库函数

这里需要用到 cv2.normalize() 库函数,做一些简单介绍

dst = cv2.normalize(src, None, 0, 255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
  • src 代表原图,dst 代表归一化的图
  • 0 ,255 代表归一化之后的最小值 和 最大值
  • norm_type = cv2.NORM_MINMAX 是归一化的一种类型,其映射函数为:

这种方式的映射和书上提供的一样。

书上的为(Gm = Gm - Gm.min() , dst = Gm / Gm.max() 在乘上255)

  • 这种映射可以将 8 bit 图像的差值范围从 -255 ~ 255 ,映射为 0 -255,而大多数将负值映射为 0 ,超过255 的映射为255是不对的

假设:原图min = a,max = b,将它映射成 0 ~ 255

  1. 按照 cv2.normalize() 库的计算公式为:[(x - a) / (b-a) ] * 255
  2. 按照书上的定义为:Gm = x - a,因此变化后Gm 的最大值应该是 b - a,所以由公式得:Gm = Gm / Gm.max()  = [(x - a) / (b-a) ] * 255
  • dtype = cv2.CV_8U  是处理后的数据类型

3. 代码实现

具体看 transform 函数的实现:

1. 选择使用高斯函数去模糊图像

2. 因为图像的格式是uint8 类型的,所以需要先转成int16 ,否则做差的时候范围保持在 0 -255

3. 将模板与原图像进行相加,这里同样需要先变成int16,否则做差的时候范围保持在 0 -255

4. 归一化,将结果图灰度值映射到0-255,并将dtype变为uint8类型,如果不加这个dtype,那么会返回处理前图像的类型,这里src_add 是int16

opencv 里面,图像在uint8 类型才能被正确显示

import cv2
import numpy as npdef transform(src, k = 1):   # 钝化掩膜和高提升滤波src_blur = cv2.GaussianBlur(src, (31, 31), sigmaX=5, sigmaY=5)      # 高斯模糊平滑图像src_mask = src.astype(np.int16) - src_blur.astype(np.int16)         # 模板mask:原图 - 差异值src_add = src.astype(np.int16) + src_mask * k      # 相加到原图dst = cv2.normalize(src_add, None, 0, 255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)  # 将灰度值映射到0-255return dstimg = cv2.imread('./img.png',0)
img  = cv2.resize(img,None,fx = 0.5,fy = 0.5,interpolation=cv2.INTER_CUBIC)  # 缩小图像cv2.imshow('k = 0.5',np.hstack((img,transform(img,0.5))))
cv2.imshow('k = 1',np.hstack((img,transform(img,1))))
cv2.imshow('k = 2',np.hstack((img,transform(img,2))))
cv2.imshow('k = 3',np.hstack((img,transform(img,3))))
cv2.waitKey()
cv2.destroyAllWindows()

最后处理的结果为:

左图均为原图,右图是不同k 的取值

不难发现,k 变大的时候,图像的细节的位置会出现暗区,这是因为mask里面有负值,而k变大加到原图会减少图像对应的灰度值甚至为负,映射到0 -255后,灰度值会很低

空间滤波 - 钝化掩蔽和高提升滤波相关推荐

  1. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波16 - 锐化高通滤波器 - 钝化掩蔽和高提升滤波

    目录 锐化(高通)空间滤波器 钝化掩蔽和高提升滤波 锐化(高通)空间滤波器 平滑通过称为低通滤波 类似于积分运算 锐化通常称为高通滤波 微分运算 高过(负责细节的)高频,衰减或抑制低频 钝化掩蔽和高提 ...

  2. 冈萨雷斯图像处理---非锐化掩蔽和高提升滤波

    冈萨雷斯图像处理-非锐化掩蔽和高提升滤波 MATLAB代码 图像处理小白,昨天老师布置了一个作业,搜半天没答案,直接自己写了呜呜呜 clear,clc; % 读取图像 Img = imread('mo ...

  3. 非锐化掩蔽和高提升滤波

    如下图为原图像.高斯滤波器模糊图像.非锐化模板.使用非锐化掩蔽的结果.使用高提升滤波的结果图. 由图可以看出,使用高斯滤波器后图像变得模糊,使用非锐化模板后所得的图像较原图像有了进一步改进,最后通过高 ...

  4. OpenCV非锐化掩蔽和高提升滤波

    非锐化掩蔽和高提升滤波 在印刷和出版界使用多年的图像锐化处理过程是从原图像中减去一幅非锐化(平滑过的)版本.这个称为非锐化掩蔽的处理过程由下列步骤组成: 1.模糊原图像 2.从原图像中减去模糊图像(产 ...

  5. 非锐化掩蔽(Unsharp Masking)与高提升滤波

    数字图像处理中图像增强算法中常用的两种技术:非锐化掩蔽和高提升滤波 非锐化掩蔽: 顾名思义即减去平滑后的图像,其原理流程图如下: 1.平滑原图像:f->s: 2.从原图像中减去模糊图像,产生的差 ...

  6. 非锐化掩膜与高提升滤波

    将原图像进行高斯平滑滤波得到模糊图像,从原图像中减去模糊图像产生的插值图像一般保留了边缘信息,称为模板,模板乘上一个修正因子,再与原图求和得到滤波后图像,达到提高高频成分,增强细节的目的,如下式子所示 ...

  7. 数字图像处理学习笔记4:图像增强之空间滤波2(一阶微分锐化滤波(梯度),二阶微分锐化(拉普拉斯),非锐化掩蔽)

    文章目录 前言 一.一阶微分和二阶微分的定义 二.一阶微分锐化滤波:梯度 1.梯度 2.sobel算子及MATLAB代码 二.二阶微分锐化滤波:拉普拉斯算子 1.拉普拉斯算子 2.拉普拉斯算子MATL ...

  8. 【OpenCV 例程200篇】87. 频率域钝化掩蔽

    [OpenCV 例程200篇]87. 频率域钝化掩蔽 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 4.2 频率域钝 ...

  9. 【OpenCV 例程200篇】62. 图像锐化——钝化掩蔽

    [OpenCV 例程200篇]62. 图像锐化--钝化掩蔽 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 3. 空间 ...

  10. 柠檬网络电视_睡觉时旁边放柠檬,真能促进长高提升记忆力?权威解答来了

    专家建议 2-4岁的儿童每天睡12小时: 4-7岁的儿童每天睡11小时: 7 -15岁的儿童每天睡9-10小时. 执笔:胡蝶 编辑:胡蝶 定稿:欧阳比文 对于孩子的身高问题,家长们可谓是操碎了心,谁不 ...

最新文章

  1. UA MATH571A 多元线性回归II 变量选择
  2. jvm性能调优 - 16案例实战_每日上亿请求量的电商系统 年轻代垃圾回收参数如何优化
  3. 1010 Radix (25 分)【难度: 难 / 知识点: 二分查找】
  4. MapReduce 初学总结
  5. idea 新建ssm java ee_IntelliJ IDEA基于SpringBoot如何搭建SSM开发环境的步骤详解
  6. 想成功创业,你首先要有这样的思维
  7. xpraid安装_XP系统怎么安装raid驱动|XP系统安装raid驱动的方法
  8. 计算机桌面计划,如何用便签在电脑桌面安排日程?
  9. 带左右箭头的图片轮播
  10. 【论文笔记】AliMe Assist阿里小蜜(未完。。。)
  11. 军工研究所需要计算机专业吗,8大军工研究所之选择——一名毕业生求职的亲身感受...
  12. PAT (Advanced Level) Practice 1043 Is It a Binary Search Tree (25 分) 凌宸1642
  13. css实现带边框,半透明气泡定位浮层效果
  14. 测试IP和端口是否通
  15. c#调用bartender模板打印标签
  16. 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD
  17. 利用程序随机构造N个已解答的数独棋盘
  18. 开启QQ登录保护仍被盗号——QQ安全机制全面分析
  19. mysql slave是什么_是mysql作用
  20. git命令统计代码量

热门文章

  1. GPT+UEFI双硬盘双系统安装
  2. java弹窗显示错误代码_打开电脑一直弹出“当前页面的脚本发生错误。代码0”...
  3. 9.23 深度学习微调
  4. html5 css3学习资料、教程、实例收集
  5. mac终端查看IP信息
  6. 小米摄像头有onvif协议_小米8SE、魅族16T、荣耀畅玩9A对比
  7. 计算机名加符号,最新带符号的网名
  8. Cloudera Manager 环境搭建
  9. 一文了解AAAI国际会议–附: 各年论文连接
  10. 戴尔_从偶像派到实力派【我身边的戴尔企业级解决方案】