文章目录

  • 前言
  • 原理
  • 改进
  • 实现

前言

一种将频率滤波和空域灰度变换结合起来的图像处理方法,根据图像的照度或反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。对增强阴影部分有较好的优势,能消除乘性噪声,能同时压缩图像的整体动态范围,并增加图像中相邻区域间的对比度,在信号与图像处理中应用广泛。

原理

输入图像由照度分量和反射分量两部分组成,即:
f(x,y)=i(x,y)r(x,y)f(x,y)=i(x,y)r(x,y)f(x,y)=i(x,y)r(x,y)
其中,0<i(x,y)<∞0<i(x,y)<\infty0<i(x,y)<∞为照度分量,描述照明,变化缓慢,处于低频部分;0<r(x,y)<10<r(x,y)<10<r(x,y)<1为反射分量,描述景物细节,变化较快,处于高频部分。
滤波步骤如下:

第一步:对原图做对数变换,将乘性信号转变为加性信号,即:
ln⁡f(x,y)=ln⁡i(x,y)+ln⁡r(x,y)\ln{f(x,y)}=\ln{i(x,y)}+\ln{r(x,y)}lnf(x,y)=lni(x,y)+lnr(x,y)
但是为了避免出现ln⁡0\ln{0}ln0,所以一般采用ln⁡(f(x)+1)\ln{(f(x)+1)}ln(f(x)+1)进行计算。
第二步:做傅里叶变换,得到其对应的频域表示为:
F[ln⁡f(x,y)]=F[ln⁡i(x,y)]+F[ln⁡r(x,y)]F[\ln{f(x,y)}]=F[\ln{i(x,y)}]+F[\ln{r(x,y)}]F[lnf(x,y)]=F[lni(x,y)]+F[lnr(x,y)]
照度分量F[ln⁡i(x,y)]F[\ln{i(x,y)}]F[lni(x,y)]频谱特性集中在低频段;反射分量F[ln⁡r(x,y)]F[\ln{r(x,y)}]F[lnr(x,y)]频谱特性集中在高频段。
第三步:设计一个频域滤波器H(u,v),进行对数图像的频域滤波:
S(x,y)=H(x,y)F[ln⁡f(x,y)]=H(x,y)F[ln⁡i(x,y)]+H(x,y)F[ln⁡r(x,y)]S(x,y)=H(x,y)F[\ln{f(x,y)}]=H(x,y)F[\ln{i(x,y)}]+H(x,y)F[\ln{r(x,y)}]S(x,y)=H(x,y)F[lnf(x,y)]=H(x,y)F[lni(x,y)]+H(x,y)F[lnr(x,y)]
H(x,y)H(x,y)H(x,y)通常采用如下形式:
Hmo(u,v)=(γH−γL)Hhp(u,v)+γLH_{mo}(u,v)=(\gamma_{H}-\gamma_{L})H_{hp}(u,v)+\gamma_{L}Hmo​(u,v)=(γH​−γL​)Hhp​(u,v)+γL​
其中,γL<1,γH>1\gamma_{L}<1,\gamma_{H}>1γL​<1,γH​>1,用来控制滤波器的幅度范围;HhpH_{hp}Hhp​为高通滤波器,常用的有高斯高通滤波器、Butterworth高通滤波器、Laplacian滤波器等。如果采用高斯高通滤波器,则有:
Hhp(u,v)=1−e−c(D2(u,v)D02)H_{hp}(u,v)=1-e^{-c(\frac{D^{2}(u,v)}{D_{0}^{2}})}Hhp​(u,v)=1−e−c(D02​D2(u,v)​)
其中,c为一个常数,控制高频与低频过渡段的曲线陡度,值越大表示越陡;D0D_{0}D0​表示截止频率,其值越大对细节的增强越明显;D(u,v)D(u,v)D(u,v)表示和频率中心的距离。如图:

注:图片来源百度搜索
第三步:进行傅里叶反变换,返回空域对数图像:
s(x,y)=F−1[S(x,y)]=F−1[H(x,y)F[ln⁡i(x,y)]]+F−1[H(x,y)F[ln⁡r(x,y)]]s(x,y)=F^{-1}[S(x,y)]=F^{-1}[H(x,y)F[\ln{i(x,y)}]]+F^{-1}[H(x,y)F[\ln{r(x,y)}]]s(x,y)=F−1[S(x,y)]=F−1[H(x,y)F[lni(x,y)]]+F−1[H(x,y)F[lnr(x,y)]]
第四步:取指数,将对数的信号转换为原始形式信号,的到空域滤波结果:
g(x,y)=es(x,y)g(x,y)=e^{s(x,y)}g(x,y)=es(x,y)
需要注意的是,在第一步操作中使用ln⁡(f(x,y)+1)\ln{(f(x,y)+1)}ln(f(x,y)+1),则此处需要使用es(x,y)−1e^{s(x,y)}-1es(x,y)−1。

改进

利用小波变换
传统的同态滤波与傅里叶变换作为变换工具,这种方法从图像的整体角度对光照不均匀进行修正,虽然可以很好地保持图像的原始面貌,但它没有充分考虑图像的空域局部特征,在增强一部分像素时导致另一部分增强。然而将小波变换作为域变换工具,在时域和频域上都具有局部性。

注:一般三层小波分解便能有较好的效果。
基于空域的同态滤波
上述两种均为频域的同态滤波方法,在转换为空域时需要花费时间,因此基于空域的同态滤波方法被人们提出。具体方法是:
第一步:进行对数变换;
第二步:对图像使用低通滤波器;
第三步:使用某一模型利用低通滤波器得到的数据来估计照明分量;
第四步:对照明分量和反射分量进行处理。
需要注意的是,该方法目前没有一种很好的方法能够对照度分量和反射分量进行估计,对特定的图像需要选取适当的滤波器并调节滤波器的系数以达到最好效果。

实现

import cv2
import numpy as np
from skimage.metrics import peak_signal_noise_ratio
from skimage.metrics import structural_similarity
import csvdef homomorphic_filter(src, d0=10, rl=0.5, rh=2.0, c=4, h=2.0, l=0.5):gray = src.copy()if len(src.shape) > 2:gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)  # 转换成灰度(RGB)图像gray = np.log(1e-5 + gray)  # 取对数rows, cols = gray.shape #设置数据维度gray_fft = np.fft.fft2(gray)  # FFT傅里叶变换gray_fftshift = np.fft.fftshift(gray_fft)  # FFT中心化M, N = np.meshgrid(np.arange(-cols // 2, cols // 2), np.arange(-rows // 2, rows // 2))D = np.sqrt(M ** 2 + N ** 2)  # 计算距离Z = (rh - rl) * (1 - np.exp(-c * (D ** 2 / d0 ** 2))) + rl  # H(u,v)传输函数,使用高斯滤波dst_fftshift = Z * gray_fftshiftdst_fftshift = (h - l) * dst_fftshift + ldst_ifftshift = np.fft.ifftshift(dst_fftshift)dst_ifft = np.fft.ifft2(dst_ifftshift)  # IFFT逆傅里叶变换dst = np.real(dst_ifft)  # IFFT取实部dst = np.exp(dst) - 1  # 还原dst = np.uint8(np.clip(dst, 0, 255))return dst#创建CSV表格用于存储数据
def writeCsv(image, psnr, ssim):row = [image, psnr, ssim]out = open("D:/homomorphic_filter/gauss/result.csv", "a", newline="")csv_writer = csv.writer(out, dialect="excel")csv_writer.writerow(row)#同态滤波并计算psnr和ssim进行保存
#writeCsv("image", "psnr", "ssim")
for j in range(10, 100):#同态滤波img = cv2.imread('D:/homomorphic_filter/Infrared_image/00{}.jpg'.format(str(j)))print(f"00{j}.jpg:")img_new = homomorphic_filter(img)#cv2.imshow("img", img)#cv2.imshow("img_new", img_new)cv2.imwrite("D:/homomorphic_filter/gauss/result_image/00{}.jpg".format(str(j)), img_new)# 指标计算img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 由于img是BGR图片,而img_new是RGB图像,所以计算psnr和ssim之前需要将img转化为RGB格式psnr = peak_signal_noise_ratio(img_1, img_new)ssim = structural_similarity(img_1, img_new, multichannel=True)print(psnr)print(ssim)writeCsv(j, psnr, ssim)#key = cv2.waitKey(0)
#cv2.destroyAllWindows()

效果如下:



个人学习笔记分享,错误望请指正!

(学习笔记)图像处理——同态滤波相关推荐

  1. PyTorch学习笔记——图像处理(transforms.Normalize 归一化)

    PyTorch学习笔记--图像处理 transforms.Normalize 归一化 回顾 torchvision.ToTensor 归一化 transforms.Normalize 公式 回顾 to ...

  2. 数字图像处理学习笔记-图像处理基础1

    该学习笔记主要参考<数字图像处理(冈萨雷斯 第三版)>,该笔记主要分为"图像处理基础""图像频率域处理""图像分割"" ...

  3. 数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

    数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一.概述 参考:特征点匹配+特征检测方法汇总 ORB的全称是Oriented ...

  4. 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

    数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一.概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了.SIFT的全称是Scale Invariant Feature Transf ...

  5. 数字图像处理学习笔记(一):特征检测和匹配概述

    数字图像处理学习笔记(一):特征检测和匹配概述 参考博客: 特征点的匹配 SIFT特征详解 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 1.特征点概述 如何高效且准确的匹配出两个不同 ...

  6. matlab连通区边界_Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI...

    本博客主要记录我学习运用matlab进行一些基本的图像处理的一些笔记,如果有不当的地方,欢迎批评指正,一起学习,一起进步. 本篇是第一篇,只涉及到一些基本的操作,涉及到的知识点如下: 1.二值化 2. ...

  7. 数字图像处理学习笔记(三)——空间分辨率和灰度分辨率、等偏爱曲线

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声.增强.复原.分割.提取特征等处理的方法和技术.本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结 ...

  8. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  9. B站台湾大学郭彦甫|MATLAB 学习笔记|08 图像处理I Image Processing

    MATLAB学习笔记(08 图像处理I Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 08 1. 基本操作 读取图像 imread() 展示图像 imshow() ...

  10. 数字图像处理MATLAB学习笔记(五)

    数字图像处理MATLAB学习笔记(五) Color Image Processing 1 Color Image Representation in MATLAB 这里不多说了,彩色图片在计算机中以R ...

最新文章

  1. m文没有matlab标识,请教个MATLAB问题
  2. 计算机模拟组装测试题一,江苏专转本计算机模拟自测试题(一)
  3. Oracle查看SQL执行计划的方式
  4. RecyclerView android:layout_width=match_parent无效
  5. 获取android的SDK或者手机目录路径
  6. zabbix历史数据mysql_处理Zabbix历史数据库办法一
  7. That assembly does not allow partially trusted callers.
  8. Oracle的CASE语句和表达式
  9. 线程中这么调用类_这些线程知识总结是真的到位!java开发两年的我看的目瞪口呆
  10. windows 下安装 rabbitmq报init terminating in do_boot错误
  11. C++——构造高度平衡的BST,并按层序输出
  12. 廖雪峰python3练习题二
  13. htc328d屏幕排线怎么换_详细的HTC T328D一键解锁教程(图文)
  14. aboutface4 1-3 读书笔记 幕布 思维导图
  15. ftp上传文件到服务器上,ftp上传文件到服务器上
  16. simulink仿真结果出现振荡
  17. 那村的人儿(村长)第十期数码照片后期处理全套培训教程
  18. Python工程师必备:基础能力提升50篇文章合集
  19. Linux手动安装和部署github
  20. maching learning入门(四)

热门文章

  1. 金蝶K3WISE15.1开启WEBAPI
  2. 什么是云计算管理平台
  3. lisp型材库_STMX 1.3.2 发布,高性能的 Common Lisp 库
  4. 中国地质大学网络计算机考试试题,中国地质大学《计算机》考试题答案
  5. Linux驱动开发: USB驱动开发
  6. 计算机视觉论文-2021-08-03
  7. 《apue》 首次拜读完经典之作,两三记录
  8. 【忆往昔】我欠老牛两本书
  9. RHadoop实践系列文章
  10. java-日记本(一)