matlab有趣的程序和命令

2019-03-04

2019-03-04  本文已影响0人  DreamPath

基于快速傅里叶变换法之图像处理整理

ims=imread('0.jpg');  
im=rgb2gray(ims);  
d0=50;  %阈值  
img_noise=imnoise(im,'salt'); % 加椒盐噪声  
%选取一种噪声,便于后续操作
%img_noise=imnoise(img_origin,'gaussian'); % 加高斯噪声  
img_f=fftshift(fft2(double(img_noise)));  %傅里叶变换得到频谱  
[m n]=size(img_f);  
m_mid=fix(m/2);  %选取一种取整方式,这里选的比较简单  
n_mid=fix(n/2);    
img_lpf=zeros(m,n);  
for i=1:m  
    for j=1:n  
        d=sqrt((i-m_mid)^2+(j-n_mid)^2);   %理想低通滤波,求距离  
        if d<=d0  
            h(i,j)=1;  
        else  
            h(i,j)=0;  
        end  
        img_lpf(i,j)=h(i,j)*img_f(i,j);    
    end  
end  
  
img_lpf=ifftshift(img_lpf);    %反傅里叶变换  
img_lpf=uint8(real(ifft2(img_lpf)));  %取实数部分  
  
subplot(2,2,1);imshow(img_origin);title('原图');  
subplot(2,2,2);imshow(img_noise);title('噪声图');  
subplot(2,2,3);imshow(img_lpf);title('理想低通滤波'); 
[thr,sorh,keepapp]=ddencmp('den','wv',img_lpf);
ixc=wdencmp('gbl',img_lpf,'sym4',2,thr,sorh,keepapp);
figure,imshow(ixc),title('消噪后图像 ');
isuo=imresize(ixc,0.25,'bicubic');
g=imdilate(isuo,strel('disk',2));
figure,imshow(g),title('增强图像');
ecanny=edge(g,'canny');
figure,imshow(ecanny),title('边缘检测图像');
if length(size(ecanny))>2
end
f=bwareaopen(ecanny,50);
figure,imshow(f),title('杂点消除');
if ~islogical(f)
imBw = im2bw(f);                        %转换为二值化图像
else
imBw =f;
end
imBw = im2bw(f);                        %转换为二值化图像
imLabel = bwlabel(imBw);                %对各连通域进行标记
stats = regionprops(imLabel,'Area');    %求各连通域的大小
area = cat(1,stats.Area);
index = find(area == max(area));        %求最大连通域的索引
img = ismember(imLabel,index);
figure,imshow(img),title('检测图像');
上一篇 下一篇

猜你喜欢

热点阅读