📄 main.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% main 主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
I1=imread('SATURN.bmp'); %读入原始图像
figure,imshow(uint8(I1));title('original picture')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 分辨率改变
% 假设图像大小为SATURN.bmp(438×328)
% imgcolnumber 代表图形的长,即图像矩阵所有的列数-438
% imgrownumber 代表图像的高,即图像矩阵所有的行数-328
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[imgrownumber, imgcolnumber]=size(I1) %行和列的方向都是隔点降采样
for m=1:0.5*imgrownumber
for n=1:0.5*imgcolnumber
I2(m,n)=I1(2*m,2*n);
end
end
figure,imshow(uint8(I2)); title('low sample'); %显示降采样后得到的图像
I3=imresize(I2,2,'nearest'); %采用最近领域插值后的图像
figure,imshow(uint8(I3)); title('nearest');
I4=imresize(I2,2,'bilinear'); %采用双线性插值后的图像
figure,imshow(uint8(I4)); title('bilinear');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 量化比特数改变
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
quant_bit_number=4; %quant_bit_number代表几比特量化,如此处就表示为7比特量化。
temp=pow2(8-quant_bit_number); %如果编译器不支持pow2函数,则可以写成:temp=trunc(exp((8-n)*ln(2)));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DFT ,不采用原始的形式DFT,直接采用快速算法fft
% fft和ifft 一维快速正逆傅立叶变换
% fft2和ifft2 二维快速正逆傅立叶变换
% fftn和ifftn n 维快速正逆傅立叶变换
% 由于频谱值范围从0到10的6次方或更高,所以要进行下面公式中取log的处理压缩处理
% 否则,由于一个图中无法显示这么大的范围,图中看到的就只有一个亮点,亮点附近的
% 细节(即低频)就难以看清。而这些恰恰是重要的。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=fft2(I1);
figure,imshow(log(abs(h)),[]), colormap(jet(64)), colorbar
figure,imshow(log(abs(h)),[])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% DCT 和IDCT
% 函数为dct2和idct2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
J=dct2(I1);
figure, imshow(log(abs(J)),[]), colormap(jet(64)), colorbar
figure, imshow(log(abs(J)),[]);
%J(abs(J) < 10) = 0;
%K = idct2(J);
%imview(I1);
%imview(K,[0 255]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 帧内统计特性
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%统计行的方向
numberarray=0:1:255;
for m=1:255
numberarray(m+1)=0;
end;
zeronumber=0;
for m=1:imgrownumber
for n=2:imgcolnumber
dif=abs(I1(m,n)-I1(m,n-1));
if(dif==0)
temp=zeronumber;
zeronumber=temp+1;
else
numberarray(dif)=numberarray(dif)+1;
end;
end;
end;
figure;plot(0,zeronumber,'r*');hold on;plot(numberarray,'g*');hold off;
%统计列的方向
%此段学生自己编写imgcolnumber
numberarray=0:1:255;
for m=1:255
numberarray(m+1)=0;
end;
zeronumber=0;
for n=1:imgcolnumber
for m=2:imgrownumber
dif=abs(I1(m-1,n)-I1(m,n));
if(dif==0)
temp=zeronumber;
zeronumber=temp+1;
else
numberarray(dif)=numberarray(dif)+1;
end;
end;
end;
figure;plot(0,zeronumber,'r*');hold on;plot(numberarray,'g*');hold off;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 帧间统计特性
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
I1=imread('claire1.bmp');
figure,imshow(uint8(I1));title('第一帧图象');
I2=imread('claire2.bmp');
figure,imshow(uint8(I1));title('第二帧图象');
[imgrownumber, imgcolnumber]=size(I1);
numberarray=0:1:255;
for m=1:255
numberarray(m+1)=0;
end;
zeronumber=0;
for m=1:imgrownumber
for n=1:imgcolnumber
dif=abs(I1(m,n)-I2(m,n));
if(dif==0)
zeronumber=zeronumber+1;
else
numberarray(dif)=numberarray(dif)+1;
end;
end;
end;
figure;plot(0,zeronumber,'r*');hold on;plot(numberarray,'g*');hold off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -