out(i,j)=0;
end
end
end
out=f.*out;%对应元素相乘实现频域滤波
(2)巴特沃斯高通滤波器
巴特沃斯高频加强公式
H(u,v)=a+b/(1+D0/D(u,v))^2n
functionout=imibtws(I,d0)
%I参数输入的灰度图像
%d0参数截止频率距远点距离
%返回值:
out–指定的巴特沃斯高通滤波器
f=fft2(I);%傅立叶变换
f=fftshift(f);%转换数据矩阵
[M,N]=size(I);
out=zeros(M,N);
nn=2;
fori=1:
M
forj=1:
N
d=sqrt((i-M/2)^2+(j-N/2)^2);
if(d)
out(i,j)=1/(1+0.414*(d0/d)^(2*nn));
end
end
end
out=f.*out;%对应元素相乘实现频域滤波
(3)归一化函数
functionout=guiyi(I)
%guiyi图像频域显示前的预处理
%I参数图像频域
%返回值:
out–图像频域显示
I=ifftshift(I);
I=ifft2(I);
I=uint8(real(I));
out=I;
(4)主函数
closeall
clear
clc
I=imread('LENA.bmp');
figure
(1);subplot(1,2,1);imshow(I);title('原图像');
f=fft2(I);%做fft变换
f=fftshift(f);%将零点移到中心
t=log(1+abs(f));%对幅值做对数变换,以压缩动态范围
figure
(1);subplot(1,2,2);imshow(t,[]);title('原图像FFT');
%t是doublearray,是浮点数,需要[].
%理想高通过滤
h=imideal(I,60);
out=f+0.9*h;
%归一化处理
out=guiyi(out);
figure
(2);subplot(1,2,1);imshow(out);title('理想高频加强锐化');
h=guiyi(h);
figure
(2);subplot(1,2,2);imshow(h);title('理想高频加强锐化');
%巴特沃斯高通过滤器
h=imibtws(I,15);
out=f+0.9*h;%高频加强锐化
%归一化处理
out=guiyi(out);
figure(3);subplot(1,2,1);imshow(out);title('巴特沃斯高频加强锐化');
h=guiyi(h);
figure(3);subplot(1,2,2);imshow(h);title('巴特沃斯高频加强滤波');
(5)实验结果
2、实现基于DCT的模拟JPEG标准图像压缩过程,并针对大压缩比的重构图像会产生马赛克效应的问题,设计采用一些方法减少马赛克效应。
程序应体现以下几个步骤。
(a)减少马赛克效应的方法,可以是图像编码中的预处理(不一定在第一个步骤)
(b)彩色坐标转换
压缩可采用YUV坐标。
(c)离散余弦变换
采用8×8子块的二维离散余弦变换算法。
(d)量化
(e)压缩图像重构
(f)结果比较与分析
(1)主函数
rgb=imread('Lena.jpg');%读取图片
%下面是对RGB三个分量进行分离,此时他们依然为整数
r=rgb(:
:
1);
g=rgb(:
:
2);
b=rgb(:
:
3);
figure,imshow(rgb),title('原来的RGB图像');
%RGB到YUV的转换
y=0.299*double(r)+0.587*double(g)+0.114*double(b);
u=-0.169*double(r)-0.3316*double(g)+0.5*double(b);
v=0.5*double(r)-0.4186*double(g)-0.0813*double(b);
yuv=cat(3,y,u,v);%YUV图像
figure,imshow(uint8(yuv)),title('通过计算得到的YUV图像')
dt=dctmtx(8);%产生一个8*8的DCT变换举证
%进行DCT变换dydudv是double类型
dy=blkproc(y,[88],'P1*x*P2',dt,dt');
du=blkproc(u,[88],'P1*x*P2',dt,dt');
dv=blkproc(v,[88],'P1*x*P2',dt,dt');
a=[1611101624405161;
1212141926586055;
1413162440576955;
1417222951878062;
182237566810910377;
243555648110411392;
49647887103121120101;
7292959811210010399;];%量化值
b=[1718244799999999;
1821266699999999;
2426569999999999;
4766999999999999;
9999999999999999;
9999999999999999;
9999999999999999;
9999999999999999;];
%系数量化
dy1=blkproc(dy,[88],'x./P1',a);
du1=blkproc(du,[88],'x./P1',b);
dv1=blkproc(dv,[88],'x./P1',b);
%这里进行取整量化,dy2du2dv2是uint8类型
dy2=int8(dy1);
du2=int8(du1);
dv2=int8(dv1);
%dy3du3dv3是double类型
dy3=blkproc(double(dy2),[88],'x.*P1',a);
du3=blkproc(double(du2),[88],'x.*P1',b);
dv3=blkproc(double(dv2),[88],'x.*P1',b);
%取左上角十个点
m=[
11110000;
11100000;
11000000;
10000000;
00000000;
00000000;
00000000;
00000000;];
%dy4du4dv4是double类型
dy4=blkproc(dy3,[88],'P1.*x',m);
du4=blkproc(du3,[88],'P1.*x',m);
dv4=blkproc(dv3,[88],'P1.*x',m);
%DCT逆变换
Y=blkproc(double(dy4),[88],'P1*x*P2',dt',dt);
U=blkproc(double(du4),[88],'P1*x*P2',dt',dt);
V=blkproc(double(dv4),[88],'P1*x*P2',dt',dt);
%YUV是double类型
YUV=cat(3,uint8(Y),uint8(U),uint8(V));%经过DCT变换和量化后的YUV图像
figure,imshow(YUV),title('经过DCT变换和量化后的YUV图像');
R=Y-0.001*U+1.402*V;
G=Y-0.344*U-0.714*V;
B=Y+1.772*U+0.001*V;
RGB=cat(3,R,G,B);%经过DCT反变换和量化后的YUV图像
RGB=uint8(RGB);
figure,imshow(RGB),title('经过压缩后的图像');
imwrite(RGB,'newLena.jpg');%保存压缩图像
(2)实验结果
(3)实验结果分析
对比压缩前后的图像可知,压缩后的图像稍显模糊,这是因为该压缩算法为有损压缩,压缩后的图像丢失了原始图像部分数据信息。
但由于DCT变换有使图像能量集中在左上方的特性,因此压缩图像保留了原始图像大部分的图像特征,其视觉效果与原始图像相差不大
3、将结合自己的研究方向和图像处理的关系,实现一个基本算法。
图像均衡化
clearall%一,图像的预处理,读入彩色图像将其灰度化
P=imread('Lena.jpg');%读入JPG彩色图像文件
imshow(P)%显示出来figureNO1
title('输入的彩色JPG图像')
imwrite(rgb2gray(P),'PicSampleGray.bmp');%将彩色图片灰度化并保存
PS=rgb2gray(P);%灰度化后的数据存入数组
figure,imshow(P)%显示灰度化后的图像,也是均衡化前的样品figureNO2
title('灰度化后的图像')
%二,绘制直方图
[m,n]=size(P);%测量图像尺寸参数
GP=zeros(1,256);%预创建存放灰度出现概率的向量
fork=0:
255
GP(k+1)=length(find(P==k))/(m*n);%计算每级灰度出现的概率,将其存入GP中相应位置
end
figure,bar(0:
255,GP,'g')%绘制直方图figureNO3
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
%三,直方图均衡化
S1=zeros(1,256);
fori=1:
256
forj=1:
i
S1(i)=GP(j)+S1(i);%计算Sk
end
end
S2=round(S1*256);%将Sk归到相近级的灰度
fori=1:
256
GPeq(i)=sum(GP(find(S2==i)));%计算现有每个灰度级出现的概率
end
figure,bar(0:
255,GPeq,'b')%显示均衡化后的直方图figureNO4
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
figure,plot(0:
255,S2,'r')%显示灰度变化曲线figureNO5
legend('灰度变化曲线')
xlabel('原图像灰度级')
ylabel('均衡化后灰度级')
%四,图像均衡化
PA=P;
fori=0:
255
PA(find(P==i))=S2(i+1);%将各个像素归一化后的灰度值赋给这个像素
end
figure,imshow(PA)%显示均衡化后的图像figureNO6
title('均衡化后图像')
imwrite(PA,'PicEqual.bmp');
实验结果