彩色图片进行傅里叶变换小波变换、重构
- 格式:pdf
- 大小:4.90 MB
- 文档页数:16
找一张彩色图片,进行傅里叶、小波分解和重构。
操作过程:
1.傅里叶变换
[X,map]=imread('c:\10.jpg','jpg'); %读入原图
>> imshow(X); %显示原图
>> title('original pic'); %命名原图
>> r=X(:,:,1); %提取red原色
>> g=X(:,:,2); %提取green原色
>> b=X(:,:,3); %提取blue原色
>> fr=fft2(r); %对red原色进行傅里叶变换
>> fg=fft2(g); %对green原色进行傅里叶变换
>> fb=fft2(b); %对blue原色进行傅里叶变换
>> sfr=fftshift(fr); %将red原色的直流分量移到频谱中心>> sfg=fftshift(fg); %将green原色的直流分量移到频谱中心>> sfb=fftshift(fb); %将blue原色的直流分量移到频谱中心
>> RRr=real(sfr); %取red原色的傅里叶变换实部>> RRg=real(sfg); %取green原色的傅里叶变换实部>> RRb=real(sfb); %取blue原色的傅里叶变换实部
>> IIr=imag(sfr); %取red原色的傅里叶变换虚部>> IIg=imag(sfg); %取green原色的傅里叶变换虚部>> IIb=imag(sfb); %取blue原色的傅里叶变换虚部
>> Ar=sqrt(RRr.^2+IIr.^2); %计算red原色的频谱幅值
>> Ag=sqrt(RRg.^2+IIg.^2); %计算green原色的频谱幅值
>> Ab=sqrt(RRb.^2+IIb.^2); %计算blue原色的频谱幅值
>> Ar=(Ar-min(min(Ar)))/(max(max(Ar))-min(min(Ar)))*225; %归一化>> Ag=(Ag-min(min(Ag)))/(max(max(Ag))-min(min(Ag)))*225; %归一化>> Ab=(Ab-min(min(Ab)))/(max(max(Ab))-min(min(Ab)))*225; %归一化
>> figure; %设定窗口
>> imshow(Ar); %显示red原色图像频谱
>> axis square; %显示为正方形
>> figure; %设定窗口
>> imshow(Ag); %显示green原色图像频谱
>> axis square; %显示为正方形
>> figure; %设定窗口
>> imshow(Ab); %显示blue原色图像频谱
>> axis square; %显示为正方形
>> or=ifft2(fr); %对red原色进行傅里叶逆变换>> og=ifft2(fg); %对green原色进行傅里叶逆变换>> ob=ifft2(fb); %对blue原色进行傅里叶逆变换
>> out(:,:,1)=real(or); >> out(:,:,2)=real(og); >> out(:,:,3)=real(ob); >> out = uint8(out);
>> imshow(out); %显示原图
2.小波函数
换成灰色图像再进行小波变换
[X,map]=imread('c:\10.jpg','jpg'); %读入原图
subplot(221);image(X);colormap(map); %显示原图
title('original pic'); %命名原图
global X; %设全局变量X
L=X; %将X赋给L
L=double(L); %强制转换L为double格式
Xrgb=0.2990*L(:,:,1)+0.5870*L(:,:,2)+0.1140*L(:,:,3); Nbcolors=255;
W=wcodemat(Xrgb,Nbcolors);
map1=gray(Nbcolors);
subplot(222);image(W);colormap(map1); %显示灰度转换图
[c,s]=wavedec2(W,2,'sym4'); %对灰度图进行2层小波分解sizec=size(c);
for i=1:sizec(2)
if (c(i)>350)
c(i)=2*c(i);
else c(i)=0.5*c(i);
end
end%循环对灰度图像分解系数进行处理,通过处理,突出轮廓部分,弱化细节部分
xx=waverec2(c,s,'sym4'); %对灰度图像处理后的系数进行重构
subplot(223);image(xx); %显示重构后灰度图像
结果显示如下: