24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 2746  |  回复: 3
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

yayashuai

木虫 (正式写手)

[求助] 请问如何滤除AFM图像中的干涉条纹噪音

小弟刚做材料表面的AFM分析,不知道是不是仪器的问题还是设置参数不对,tapping模式空气中扫描样品图像的过程中出现了很深的干涉条纹(一道道的有规则形状的干涉条纹)。,当时百度的时候有回答说先扫描,之后可以用软件滤除的。但是找了很多方法都不能很好的去除(主要原因是我对图像处理软件原理一窍不通,FFT也不知道是什么回事)。请问各位大牛是用什么软件或者怎样处理可以滤除掉这些干涉条纹啊?

请问如何滤除AFM图像中的干涉条纹噪音
Height Sensor2.jpg
回复此楼

» 本帖@通知

» 猜你喜欢

» 本主题相关商家推荐: (我也要在这里推广)

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yayashuai

木虫 (正式写手)

引用回帖:
2楼: Originally posted by renzhetu001 at 2014-10-30 20:23:05
不是来应助的,只是说说自己对这个问题的想法,大神们可以继续应助(嗯,我就是来打酱油的)
这里处理的图像是黑白的(彩色的要麻烦很多),不过原数据应该不存在这个问题
http://pan.baidu.com/s/1o68zf9g
文件 ...

回复很详细,非常感谢,只有第一部分现在看得懂,还有个问题:FFT转换后那个白色十字架就是噪音部分吧,将属于噪音的部分涂黑,是你这样子涂呢还是就是把这个白色十字架涂成周围一样的色调?
3楼2014-10-31 16:48:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 4 个回答

renzhetu001

金虫 (小有名气)

不是来应助的,只是说说自己对这个问题的想法,大神们可以继续应助(嗯,我就是来打酱油的)
这里处理的图像是黑白的(彩色的要麻烦很多),不过原数据应该不存在这个问题
http://pan.baidu.com/s/1o68zf9g
文件名(filter noise1.jpg)
首先,随便找一款软件,应该是任意一款AFM 的读取软件都行,这里使用的是ImageJ(一般来讲不是用来处理AFM图片的,但是原理是一致的)
找到Process》FFT》FFT对原图进行傅里叶变换得到下图
文件名(FFT of filter noise 1.jpg)
将属于噪音的部分涂黑(其实应该用interpolation算一下,不应直接归零,我嫌麻烦就没做,你可以试试),有图如下
文件名(FFT of filter noise.jpg)
找到Process》FFT》FFT把改过的这张图变回去,就可以了
文件名(Inverse FFT of filter noise.jpg)

如嫌麻烦可以把周期在噪音以下(这张图中20个pixel)的都滤去,
找到Process》FFT》Bandpass filter,
Filter large structures down to 400pixels
Filter small structures up to 21pixels
得到下图
http://pan.baidu.com/s/1mgMatKk

关于理想情况下噪音是个正交函数(周期20pixels)的情况我做了以下计算
文件名(Inverse FFT of filter noise.jpg)
图中第一列为原图和他的傅里叶变换
第二列为添加噪音后的图和他的傅里叶变换
比较可以发现傅里叶变换后噪音峰的频率
该处用周围的强度替换,进行傅里叶变换
得到第三列的图
和原图一致(因显示问题图颠倒了)

具体原理可用如下python程序说明
#!/usr/local/bin/python2.7.3 -tttt
import numpy
import matplotlib.pyplot as plt
import random

crosssection=numpy.zeros((521, 521), dtype=complex)+1
position=numpy.random.randint(20,355, size=(2, 10))
for i in range(10):
    crosssection[position[0, i]-20:position[0, i]+20,position[1, i]-15:position[1, i]+15]=random.randint(1,10)
plt.subplot(3,2,1)
plt.imshow(numpy.absolute(crosssection),cmap=plt.cm.gray)
imgfft=numpy.fft.fft2(crosssection)
imgfft=numpy.fft.fftshift(imgfft)
plt.subplot(3,2,2)
plt.imshow(numpy.log10(numpy.absolute(imgfft)+1),cmap=plt.cm.gray)
noise=numpy.sin(numpy.arange(521*521,dtype=complex)*numpy.pi/10).reshape((521,521))*4
crosssection=crosssection+noise
plt.subplot(3,2,3)
plt.imshow(numpy.absolute(crosssection),cmap=plt.cm.gray)
imgfft=numpy.fft.fft2(crosssection)
imgfft=numpy.fft.fftshift(imgfft)
plt.subplot(3,2,4)
plt.imshow(numpy.log10(numpy.absolute(imgfft)+1),cmap=plt.cm.gray)
imgphase=numpy.angle(imgfft)
imgintensity=numpy.absolute(imgfft)
imgintensity[:,233:235]=imgintensity[:,230:232]
imgintensity[:,285:287]=imgintensity[:,288:290]
imgintensity[233:235,:]=imgintensity[230:232,:]
imgintensity[288:290,:]=imgintensity[288:290,:]
imgfftcal=numpy.multiply(numpy.absolute(imgintensity), numpy.exp(1j*imgphase))
plt.subplot(3,2,6)
plt.imshow(numpy.log10(numpy.absolute(imgfftcal)+1),cmap=plt.cm.gray)
imgcal=numpy.fft.fft2(imgfftcal)
plt.subplot(3,2,5)
plt.imshow(numpy.absolute(imgcal),cmap=plt.cm.gray)
plt.show()
2楼2014-10-30 20:23:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

renzhetu001

金虫 (小有名气)

其实用周围的值要好一些,涂黑相当于把那部分的值直接变成0,是不好的
4楼2014-10-31 21:30:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见