数字图像处理同态滤波(matlab)

定义

一幅图像可看成由两部分组成,即

img

  • fi代表随空间位置不同的亮度(Illumination)分量,其特点是缓慢变化,集中在图像的低频部分。
  • fr代表景物反射到人眼的反射(Reflectance)分量,其特点包含了景物各种信息,高频成分丰富。

上式为同态滤波模型公式,其中,
0 < i ( x , y ) < 无 穷


0 < r ( x , y ) < 1

入射分量可以在0-无穷之间变化,反射分量只能在0-1之间变化,当反射分量为0时,说明物体将光全吸收,为黑色,当反射分量为1时,说明物体将光全反射,为白色。

同态滤波流程

同态滤波过程,分为以下5个基本步骤:

  • 取对数
    在这里插入图片描述
  • 取对数结果做傅里叶变换
    在这里插入图片描述
  • 设计一个实中心对称的频域滤波器H(u,v),与上步傅里叶变换结果阵列相乘
  • 傅里叶反变换,返回到空域
  • 取指数,得空域滤波结果。

方框图表示如下:

img

可以看出同态滤波的关键在于同态滤波器H(u,v)的设计,同态滤波的目的在于:对一幅光照不均匀的图像,适当压制亮度分量,增强反射分量,以此来实现亮度调整与对比度提升,从而改善图像的视觉质量。

通过以上分析我们可以知道:同态滤波器可以由高通滤波器来实现,但是又不能完全截断低频成分,只要适当压低即可,所以同态滤波器的函数表示如下:

img
其中,yL<1,yH>1,控制滤波器幅度的范围。Hhp通常为高通滤波器,如高斯(Gaussian)高通滤波器、巴特沃兹(Butterworth)高通滤波器、Laplacian滤波器等。其中,yL< 1, yH >1,控制滤波器幅度的范围。Hhp通常为高通滤波器,如高斯(Gaussian)高通滤波器、巴特沃兹(Butterworth)高通滤波器、Laplacian滤波器等。 yL<1,yH>1HhpGaussian(Butterworth)Laplacian
如高通滤波器采用高斯高通滤波器则有如下形式:

img

同态滤波器对应的图像表示如下:

其中, c为一个常数,控制滤波器形态,从低频到高频的斜率,c越大,斜坡带越陡峭

img

matlab实现代码

注意:取指数后一定要进行像素拉伸

%读入图片
img = imread('office.png');
img = rgb2gray(img);
figure(1);
subplot(2, 1, 1);
imshow(img);
title('Raw Image');
gamma_H = 2;
gamma_L = 0.25;
c = 0.25;
D0 =100;
f = double(img);
f = log(f + 1);%取指数
F = fft2(f);%傅里叶变换
F=fftshift(F);%频谱搬移
[height, width] = size(F);
%设计一个同态滤波器
H = HomomorphicFiltering(gamma_H, gamma_L, c, D0, height, width);
g=H.*F;%同态滤波
g = ifft2(ifftshift(g));%频谱搬移,傅里叶逆变换
g = exp(g)-1;
g = real(g);
%拉伸像素值
new_img = Expand(g);
subplot(2,1,2);
imshow(new_img);
title('Homomorphic Filtered Image(D0 = 100)');function new_img = Expand( img ) [height, width] = size(img);max_pixel = max(max(img));min_pixel = min(min(img));new_img=zeros(height,width);for i = 1 : heightfor j = 1 : widthnew_img(i, j) = 255 * (img(i, j) - min_pixel) / (max_pixel - min_pixel);endendnew_img = uint8(new_img);
endfunction H = HomomorphicFiltering( gamma_H, gamma_L, c, D0, height, width )for i = 1 : heightx = i - (height / 2);for j = 1 : widthy = j - (width / 2);H(i, j) = (gamma_H - gamma_L) * (1 - exp(-c * ((x ^ 2 + y ^ 2) / D0 ^ 2))) + gamma_L;endend
end

运行结果

img

参考链接

图像的同态滤波原理及实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java并发编程-ReentrantLock源码分析

一、前言 在分析了 AbstractQueuedSynchronier 源码后&#xff0c;接着分析ReentrantLock源码&#xff0c;其实在 AbstractQueuedSynchronizer 的分析中&#xff0c;已经提到过ReentrantLock&#xff0c;ReentrantLock表示下面具体分析ReentrantLock源码。 二、ReentrantLock数…

谷歌浏览器好用的复制粘贴插件_copybetter增强复制 很好用的chrome复制粘贴插件 解除页面复制限制...

使用说明&#xff1a;增强复制(copybetter) 简介增强复制(copybetter)是一款国人开发的chrome浏览器复制增强扩展插件&#xff0c;作者参考了Copy Fixer和Autocopy两个扩展插件开发而成的。这里是他的个人网站&#xff1a;kodango.com。插件集成了关于复制粘贴功能的几个非常常…

绿色vmware 安装后看不到虚拟的网卡

绿色vmware 安装后看不到虚拟的网卡&#xff0c;按下面方法就可以添加。 1. 到Vmware 安装目录&#xff0c;运行 vmnetcfg,运行后出现虚拟网络编辑器 2. 转到主机虚拟适配器&#xff0c;单击添加 3. 转到网络连接就可以看到新增的vmware 虚拟网卡 转载于:https://www.cnblogs.c…

C语言strtok函数的用法

strtok是字符串切割函数 定义 参数一&#xff1a;待切割字符串参数二&#xff1a;分隔符集合首次调用时传递参数为&#xff1a; strtok(str,seps);之后再次调用时传递参数为: strtok(NULL,seps);​ 若可以切割&#xff0c;函数返回值为字符指针&#xff0c;各段切割好的字符串…

webservice接口等待时间_调用webservice超时问题的解决

1、web.config配置&#xff0c;里面增加&#xff1a;2、扩大代理类的超时限制&#xff0c;默认是90秒YourWebService yws new YourWebService();yws.Timeout 1200000; //20分钟3、IIS属性-网站 连接超时时间 1200秒1、修改 app.config 文件&#xff0c;添加如下代码&#x…

UItableViewCell滑动删除时,调整cell子视图的位置大小

UItableViewCell滑动删除时&#xff0c;调整cell的位置大小是否显示等。CustomTableViewCell为UITableViewCell的子类&#xff0c;在实现文件中重写willTransitionToState方法。willTransitionToState是在cell改变显示状态的时候调用&#xff0c;有三种状态&#xff1a;typedef…

表的转置

表的转置useSSISdroptablePTVgocreatetablePTV(TimeID nvarchar(10),ResourceID int,KPI1 numeric(38,2),KPI2 numeric(38,2),KPI3 numeric(38,2),KPI4 numeric(38,2),KPI5 numeric(38,2))goinsertintoptv values(101,1,2.78,3,5,4,4)insertintoptv values(102,2,2.7,50,95,44,…

51单片机C语言led流水灯及数码管实现秒表

51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED P0^0; void main() {unsigned int i0;while(1){LED 1;for(i0;i<60000;i);LED 0;for(i0;i<60000;i);} }led流水灯 #include<reg52.h>void main() {un…

extjs中元数据_Extjs中Store小总结

http://blog.csdn.net/without0815/article/details/77981701.什么是store&#xff1f;Store类似于一个本地仓库(即数据存储器),包括有 ArrayStore,DirectStore,GroupingStore,JsonStore,XmlStore(都是store的子类)最终主要用于提供给panel去显示.Store由Proxy(数据源)和DataRe…

内聚和耦合(自己的理解)

网上对于内聚和耦合的资料太多&#xff0c;这里结合我的感受和其他人的答案http://blog.csdn.net/zhiquan/article/details/4255161谈谈自己的理解 以下是我对内聚和耦合的理解&#xff08;例子来源于生活&#xff09;。 1.内聚&#xff1a; i.偶然内聚&#xff1a;如果一个模块…

UIButton return(textField textView)

首先设置TextField 或 TextView的 delegate /UITextView - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {if ([text isEqualToString:"\n"]) {NSLog("点击return");return NO;}retur…

(转)交换机攻击方法描述

利用交换机漏洞的攻击方法如下&#xff1a;一、生成树攻击生成树协议(STP)可以防止冗余的交换环境出现回路。要是网络有回路&#xff0c;就会变得拥塞不堪&#xff0c;从而出现广播风暴&#xff0c;引起MAC表不一致&#xff0c;最终使网络崩溃。使用STP的所有交换机都通过网桥协…

数据结构-顺序表(C语言实现)

主函数代码&#xff08;main.c&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include "sqlist.h" int main() {sqlist *list NULL,*list_next NULL;int pos 0;int i, err, value;int arr[10] { 10,20,30,40,50,60,70,80,90,100 };i…

shell的logo含义_Shell(壳牌石油)标志历史

荷兰皇家壳牌集团(Royal Dutch Shell&#xff0c;又译蚬壳)是世界第二大石油公司&#xff0c;总部位于荷兰海牙。荷兰皇家壳牌集团由荷兰皇家石油与英国的壳牌两家公司合并组成。荷兰皇家石油于1890年创立&#xff0c;并获得荷兰女王特别授权&#xff0c;因此被命名为荷兰皇家石…

无用的设计模式之装饰者模式

为什么80%的码农都做不了架构师&#xff1f;>>> 前言 装饰者设计模式本来是很常用的模式&#xff0c;常用到随处可见&#xff0c;jdk的bio设计都是遵循这个模式的&#xff0c;偶然的机会发现&#xff0c;貌似jdk中bio的装饰者模式和设计模式中的装饰者设计模式却有…

winform 程序制作自己的数字签名(续)

在上一篇文章《winform 程序制作自己的数字签名》中我们已经可以得到我们程序定制的数字签名了&#xff0c;但是比较讨厌的是每次编译之后&#xff0c;数字签名需要重新手动添加。 我们需要的是在程序编译时自动添加数字签名。 那实际上vs已经提供了此功能&#xff0c;具体操作…

转-HTC 手机生产日期,产地查询 以及 SN码 IMEI码 查询等问题汇总

问&#xff1a;什么是IMEI码&#xff1f;什么是SN码&#xff1f; 答&#xff1a;IMEI码&#xff0c;国际移动装备辨识码&#xff08;International Mobile Equipment Identity number&#xff0c;IMEI&#xff09;。SN码即Serial Number&#xff0c;产品序列号。 问&#xff1a…

数据结构带头结点单向不循环链表(C语言版)

main.c,负责测试 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> #include "linklist.h" int main() {LNode* listNULL;int i 0,err 0;datatype a 40,return_value0;datatype arr[] { 20,10,90,100,50,40,20,60,70,80 }…

Django设置TIME_ZONE和LANGUAGE_CODE为中国区域

Django默认的timezone是 TIME_ZONE America/Chicago LANGUAGE_CODE en-us 设置为中国区域&#xff1a; TIME_ZONE Asia/Shanghai LANGUAGE_CODE zh-cn 另外你可以根据情况设置 \Lib\site-packages\django\conf\global_settings.py 里面的时区转载于:https://www.cnblogs.co…

每天10分钟用python学数据分析_用Python做数据分析,Numpy,Pandas,matp

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼用Python做数据分析&#xff0c;Numpy&#xff0c;Pandas&#xff0c;matplotlib是怎么也绕不开的三个包&#xff0c;我最开始学习pandas是看的《利用Python进行数据分析》&#xff0c;看了好几遍&#xff0c;不是从头到尾看了好几…