2019-03-04
2019-03-04 本文已影响0人
DreamPath
基于快速傅里叶变换法之图像处理整理
- 1.这里采用的是傅里叶变换技术,在噪点消除上有明显的不同,其次就是在杂点去除过程中有明显的差别。这样更有利于图像全部像素点的采集处理。
- 2.由于傅里叶变换需要将每个像素点都要一次一次的计算,使得程序运行起来相对吃力一点。所以后期的优化工作需要采用其他更高效的办法进行测试比较。
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('检测图像');