| 查看: 2827 | 回复: 3 | ||
[求助]
请问如何滤除AFM图像中的干涉条纹噪音
|
renzhetu001
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1301.9
- 帖子: 110
- 在线: 293.8小时
- 虫号: 2132225
- 注册: 2012-11-17
- 性别: GG
- 专业: 同步辐射技术及其应用
|
不是来应助的,只是说说自己对这个问题的想法,大神们可以继续应助(嗯,我就是来打酱油的) 这里处理的图像是黑白的(彩色的要麻烦很多),不过原数据应该不存在这个问题 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
3楼2014-10-31 16:48:18
renzhetu001
金虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 1301.9
- 帖子: 110
- 在线: 293.8小时
- 虫号: 2132225
- 注册: 2012-11-17
- 性别: GG
- 专业: 同步辐射技术及其应用
4楼2014-10-31 21:30:14













回复此楼