IDL实现同态滤波
发布时间: 2014-01-18
所属分类: 数字图像处理(IDL)
什么是同态滤波
同态滤波是把频率过滤和灰度变换结合起来的一种图像处理方法,它依靠图像的照度/ 反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。
同态滤波原理
将像元灰度值看作是照度和反射率两个组份的产物。由于照度相对变化很小,可以看作是图像的低频成份,而反射率则是高频成份。通过分别处理照度和反射率对像元灰度值的影响,达到揭示阴影区细节特征的目的。
同态滤波流程
全部代码
;Name: 同态滤波
;Time: 2013-12-19
;Author: 尹全超
PRO item_b_2
;读取图像
file = DIALOG_PICKFILE(/READ, FILTER = '*.bmp')
binary_img = READ_BMP(file)
img01 = image(binary_img,LAYOUT=[2,1,1],title='Original')
;过滤无效数据(避免灰度为0)
ind0=where(binary_img eq 0)
IF(ind0[0] ne -1) THEN BEGIN
binary_img[ind0]=1
ENDIF
;ln运算
lndata=alog(binary_img)
;快速傅里叶变换
ffTransform = FFT(lndata, /CENTER)
;频域滤波
;巴特沃斯 高通滤波
;交互输入D0和阶数
low_row=N_elements(ffTransform[0,*])
low_col=N_elements(ffTransform[*,0])
order_low=2
d0_low=60
btlow=dblarr(low_col,low_row)
FOR i=0,low_row-1 DO BEGIN
FOR j=0,low_col-1 DO BEGIN
btlow[j,i]=1.0/(1.0+(d0_low/float(sqrt(ULONG((i-low_row)*(i-low_row)+(j-low_col/2)*(j-low_col/2)))))^(2*order_low))
ENDFOR
ENDFOR
;反傅里叶变换
LffTransform=FFT(ffTransform*btlow,/INVERSE,/CENTER)
;取指数
reldata=exp(LffTransform)
img02 = IMAGE(reldata,/CURRENT,LAYOUT=[2,1,2],title='Result')
END
效果图
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读

最新GIS干货

私享圈子
下一篇:IDL实现直方图均衡化
请问,用IDL语言怎么保存自定义路径图片?
我是用这种方法,http://malagis.com/idl-save-image-object-graphic.html
好的,非常感谢!
不必客气~
你好,我在自己试验的过程中发现运行不了,IF(ind0[ 这句有错误,请问要怎么修改呢?
你好,是代码转义的问题,不好意思,我现在修改了代码,您重新运行一下试试看看。有什么问题可以继续留言。
你好,可以对同态滤波进行一点算法改进,引入空域平滑滤波,来处理一些高频区的云,然后用IDL实现,对ENVI二次开发吗?
我理解应该是可以的。
请问这一段代码可以直接用于5.3版本吗?
你可以试试,我没测试过。
你好,可以加一个联系方式吗?有些问题想咨询一下。谢谢
IDL是我5年前看的东西了,早就忘的差不多了,多百度比找我咨询靠谱
代码在IDL中是可以直接使用吗,需不需要添加其他的语句,运行过后如何在ENVI中调用?(小白需要做实验,哪位可以解答,非常感谢)
代码可以直接用,当时实验写的Demo,不建议上生产环境