我正在尝试使用 dm 脚本将带通滤波器应用于图像,以滤除噪声像素。我可以使用
AddBandPassMaskToImage()
方法来完成此任务吗?它仅适用于 RealImage
数据类型,并且它返回的过滤图像中间有一个大的黑色圆形带。如何正确使用?
AddBandPassMaskToImage( ImageReference mask, Number x_center, Number y_center, Number
band_radius_1, Number band_radius_2, Number filter_length, Boolean do_inverse )
我的代码和结果图像如下。我没想到过滤后的图像中会出现任何黑带。我怀疑我错误地使用了该方法,但由于掩码适用于
RealImage
数据类型而不是 ComplexImage
数据类型,我认为我不需要对 FFT 执行任何操作。
image front = GetFrontImage()
number xsize, ysize, zsize
get3dsize(front, xsize, ysize, zsize)
image frontCopy := front
AddBandPassMaskToImage(frontCopy, xsize/2, ysize/2, 5, 154, 1, 0)
showImage(frontCopy)
我没有发布图片的声誉,但链接如下:
一般来说,我建议使用过滤器面板来设置(命名)过滤器,然后将它们与
IFMApplyFilter
命令一起使用,正如 F1 帮助文档中脚本示例的 Filtering 部分中所述:
命令
AddBandPassMaskToImage
只是向图像添加平滑的环形零到一值部分,以帮助在傅立叶空间中创建带通掩模。然后需要应用(乘以)掩模来减弱强度,然后再将图像反向转换到真实空间。
realimage img := RealImage( "Test Image 2D", 4, 512, 512 )
img = abs( itheta*2*icol/(iwidth+1)* sin(iTheta*20) )
img = PoissonRandom(100*img)
img.ShowImage()
// Transform
compleximage img_FFT := FFT(img)
// Modify in F-Space
// Build mask
image mask:=RealImage("Mask in F-Space",4,512,512)
mask.AddBandPassMaskToImage( 256, 256, 200, 40, 10, 0 )
mask.ShowImage()
//Apply mask
img_FFT *= mask
img_FFT.SetName( "Masked FFT" )
img_FFT.ShowImage()
// Transform back
image img_filter := modulus(iFFT(img_FFT))
img_filter.SetName("Filtered")
img_filter.ShowImage()
EGUPerformActionWithAllShownImages("arrange")