roipoly 与 频谱图结合,实现图像频谱图的滤波范围的交互式选取,记录一下

该博客通过MATLAB实现了一种交互式的频谱滤波方法,包括低通、高通和带通滤波。用户可以在频谱图上选取滤波范围,通过`roipoly`函数进行交互选择,然后利用FFT和IFFT进行滤波操作,最后展示滤波结果。博客详细展示了每一步骤,并提供了代码示例。
摘要由CSDN通过智能技术生成

fft = fft2(image);%加载图像
fft_shift=fftshift(fft);
power = log(abs(fft_shift));
I=power;
I = (I - min(I(:))) / (max(I(:)) - min(I(:)));
I = im2uint8(I);%imshow(I)与imshow(I,[])存在差异,此处是为了roipoly能够调用频谱图,在频谱图上交互式选取滤波范围

figure;
set (gcf,'Position',[267 308 1498 620])
set (gcf,'Name','低通滤波-请手动选取滤波范围,双击选择区域确定')
subplot(131);imshow(image);title('原图');
subplot(132);title('选取滤波范围');
[B r c]=roipoly(I);%交互式选取滤波范围
imshow(power.*B,[])
title('滤波后频谱');
subplot(133);title('低通滤波结果');
imshow(ifft2(ifftshift( fft_shift.*B)))

pause(1)
figure;
set (gcf,'Position',[267 308 1498 620])
set (gcf,'Name','高通滤波-请手动选取滤波范围,双击选择区域确定')
subplot(131);imshow(image);title('原图');
subplot(132);title('选取滤波范围');
[B r c]=roipoly(I);%交互式选取滤波范围
imshow(power.*~B,[])
title('滤波后频谱');
subplot(133);title('高通滤波结果');
imshow(ifft2(ifftshift( fft_shift.*~B)))

pause(1)
figure;
set (gcf,'Position',[267 308 1498 620])
set (gcf,'Name','带通滤波-请手动选取滤波范围,先选大范围,再选小范围,双击选择区域确定')
subplot(131);imshow(image);title('原图');
subplot(132);title('选取滤波范围');
[Bmax r c]=roipoly(I);%交互式选取滤波范围
[Bmin r c]=roipoly(I);%交互式选取滤波范围
B = Bmax & ~Bmin;
imshow(power.*B,[])
title('滤波后频谱');
subplot(133);title('带通滤波结果');
imshow(ifft2(ifftshift( fft_shift.*B)))
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值