图像处理实验报告太原理工大学现代科技学院Word文档下载推荐.docx
《图像处理实验报告太原理工大学现代科技学院Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《图像处理实验报告太原理工大学现代科技学院Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。
imshow(uint8(I));
imwrite(uint8(I),'
\daxia1.tif'
tire.tif'
figure
subplot(221);
x.tif'
I1=histeq(I)
figure;
imshow(I1);
imwrite(I1,'
x1.tif'
subplot(222);
imhist(I1);
x2.tif'
>
I=imread('
[M,N]=size(I)
II1=zeros(M,N);
fori=1;
16
II(:
:
i)=imnoise(I,'
gaussian'
0,0.01)
II1=II1+double(II(:
i));
ifor(or(i==1,i==4),or(i==8,i==16));
imshow(uint8(II1/i));
imwrite(uint8(II1/i),'
中值滤波
J=imnoise(I,'
salt&
pepper'
0.02);
subplot(231),imshow(I);
title('
原图像'
subplot(232),imshow(J);
添加椒盐噪声图像'
imwrite(J,'
k1=medfilt2(J);
k2=medfilt2(J,[55]);
k3=medfilt2(J,[77]);
k4=medfilt2(J,[99]);
subplot(233),imshow(k1);
3*3模板中值滤波'
imwrite(k1,'
subplot(234),imshow(k2);
5*5模板中值滤波'
imwrite(k2,'
x3.tif'
subplot(235),imshow(k3);
7*7模板中值滤波'
imwrite(k3,'
subplot(236),imshow(k4);
9*9模板中值滤波'
imwrite(k4,'
x4.tif'
subplot(131),imshow(I);
H=fspecial('
Sobel'
H=H'
;
TH=filter2(H,I);
subplot(132),imshow(TH,[]);
imwrite(TH,'
subplot(133),imshow(TH,[]);
1.设定不同的斜率值和截距,显示效果会怎么样?
答:
设定不同的斜率值和截距,可对任一灰度区间进行扩展和压缩。
2
、直方图均衡化是什么意思?
它的主要用途是什么?
若一幅图像其像素占有全部可能的灰度级并且分布均匀,
则这样的图像有高
对比度和多变的灰度色调,而显示出一幅灰度级丰富且动态范围大的图像。
把原始图像不均衡的直方图变换为均匀分布的形式,这样就增加了灰度值的
动态范围,从而达到增强图像整体对比度的效果。
3
、均值(中值)滤波的模板大小对处理效果有什么影响?
二维中值滤波的窗口形状和尺寸对滤波效果影响较大。
不同的图像内容和不
同的应用要求,应该采用不同的窗口形状和尺寸
实验二、图像几何变换
2理解和掌握图像的平移、垂直镜像变换、水平镜像变换、缩放和旋转的原理和应用;
1初始坐标为(
)的点经过平移(
,
),坐标变为(
),两点之间的关系为:
,以矩阵形式表示为:
2图像的镜像变换是以图象垂直中轴线或水平中轴线交换图像的变换,分为垂直镜像变换和水平镜像变换,两者的矩阵形式分别为:
3图像缩小和放大变换矩阵相同:
当
时,图像缩小;
时,图像放大。
4图像旋转定义为以图像中某一点为原点以逆时针或顺时针方向旋转一定角度。
其变换矩阵为:
该变换矩阵是绕坐标轴原点进行的,如果是绕一个指定点(
)旋转,则现要将坐标系平移到该点,进行旋转,然后再平移回到新的坐标原点。
1启动MATLAB程序,对图像文件分别进行生成、失真和校正;
(参考教材100页,例5.8,例5.9)
2记录和整理实验报告
f=checkerboard(19);
figure
(1);
imshow(f);
imwrite(f,'
s=0.7;
theta=pi/9;
T=[s*cos(theta)s*sin(theta)0
-s*sin(theta)s*cos(theta)0
001];
tform=maketform('
affine'
T);
g1=imtransform(f,tform,'
nearest'
imshow(g1);
imwrite(g1,'
g2=imtransform(f,tform);
figure(3);
imshow(g2);
imwrite(g2,'
g3=imtransform(f,tform,'
Fillvalue'
0.5);
figure(4);
imshow(g3);
imwrite(g3,'
f=imread('
circlesBrightDark.png'
g=imread('
imshow(g);
base_points=[256.4000256.1273;
1.5818256.4182;
256.41821.0000;
200.5636203.4727;
147.3273183.9818;
96.4182145.0000;
44.636435.0364;
157.509130.3818];
input_points=[280.0455304.6182;
1.3455255.2545;
255.25451.0000;
205.8545225.8909;
145.7455196.5273;
90.4727146.7818;
38.654532.4364;
148.509131.0545];
tform=cp2tform(input_points,base_points,'
projective'
gp=imtransform(g,tform,'
XData'
[1256],'
YData'
[1256]);
imshow(gp);
d:
\00.tif'
)
imwrite(g,'
\01.tif'
imwrite(gp,'
\02.tif'
六、思考题
1.改变水平和垂直的偏移量,观察显示?
答:
图像扭曲
2.改变缩放比例,看看效果如何?
图像复原大小改变
3.改变旋转角度,显示效果会怎么样?
实验三、图像压缩编码技术
一、实验目的
1、理解有损压缩和无损压缩的概念;
2、理解图像压缩的主要原则和目的;
3、了解几种常用的图像压缩编码方式;
4、利用MATLAB程序进行图像压缩编码。
二、实验原理
1、图像压缩原理
图像压缩主要目的是为了节省存储空间,增加传输速度。
图像压缩的理想标准是信息丢失最少,压缩比例最大。
不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;
损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。
压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。
信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。
高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。
编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。
(1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。
具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。
(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。
也就是说解码图像和原始图像是有差别的,允许有一定的失真。
应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:
(1)无损压缩编码种类
哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempelzev编码。
(2)有损压缩编码种类
预测编码,DPCM,运动补偿;
频率域方法:
正交变换编码(如DCT),子带编码;
空间域方法:
统计分块编码;
模型方法:
分形编码,模型基编码;
基于重要性:
滤波,子采样,比特分配,向量量化;
(3)混合编码。
有JBIG,H.261,JPEG,MPEG等技术标准。
本实验主要利用MATLAB程序进行赫夫曼(Huffman)编码和行程编码(RunLengthEncoding,RLE)。
三、实验内容
1、实现基本JPEG的压缩和编码分三个步骤:
(1)首先通过DCT变换去除数据冗余;
(2)使用量化表对DCT系数进行量化;
(3)对量化后的系数进行Huffman编码。
四、实验步骤
1打开计算机,启动MATLAB程序;
2选择一幅图像,并进行赫夫曼和行程编码压缩处理;
3将原图像在Photoshop软件中打开,分别以不同的位图文件格式进行“另保存”,比较它们的数据量。
4记录和整理实验报告
五、实验仪器
2MATLAB、Photoshop等程序;
3移动式存储器(软盘、U盘等)。
4记录用的笔、纸。
六、实验报告内容
editaddnode
functioncodeword_new=addnode(codeword_old,item)
codeword_new=cell(size(codeword_old));
forindex=1:
length(codeword_old)
codeword_new{index}=[itemcodeword_old{index}];
editfrequency
functionf=frequency(vector)
if~isa(vector,'
uint8'
error('
inputargumentmustbeauint8vector'
f=repmat(0,1,256);
len=length(vector);
forindex=0:
255
f(index+1)=sum(vector==uint8(index));
f=f./len;
edithuffencode
%huffencodeº
¯
Ê
ý
¶
Ô
ä
È
ë
¾
Ø
Õ
ó
vector½
ø
Ð
Huffman±
à
Â
£
¬
·
µ
»
±
º
Ä
Ï
ò
Á
¿
¨
Ñ
¹
Ë
õ
Ý
©
¼
°
Å
¢
function[zipped,info]=huffencode(vector)
%Ê
Í
³
ö
Ç
uint8¸
ñ
½
%info·
â
è
Ò
ª
á
%info.padÊ
Ì
í
Ó
%info.huffcodesÊ
HuffmanÂ
×
Ö
%info.rowsÊ
Ê
%info.colsÊ
%info.lengthÊ
¤
%info.maxcodelenÊ
î
´
if~isa(vector,'
eror('
[m,n]=size(vector);
vector=vector(:
)'
f=frequency(vector);
%¼
Æ
ã
¸
÷
û
symbols=find(f~=0);
f=f(symbols);
[f,sortindex]=sort(f);
%½
«
¡
symbols=symbols(sortindex);
len=length(symbols);
symbols_index=num2cell(1:
len);
codeword_tmp=cell(len,1);
whilelength(f)>
1%É
ú
É
HuffmanÊ
Ã
index1=symbols_index{1};
index2=symbols_index{2};
codeword_tmp(index1)=addnode(codeword_tmp(index1),uint8(0));
codeword_tmp(index2)=addnode(codeword_tmp(index2),uint8
(1));
f=[sum(f(1:
2))f(3:
end)];
symbols_index=[{[index1,index2]}symbols_index(3:
[f,sortindex]=sort(f);
symbols_index=symbols_index(sortindex);
codeword=cell(256,1);
codeword(symbols)=codeword_tmp;
len=0;
length(vector)
len=len+length(codeword{double(vector(index))+1});
string=repmat(uint8(0),1,len);
pointer=1;
code=codeword{double(vector(index))+1};
len=length(code);
string(pointer+(0:
len-1))=code;
pointer=pointer+len;
len=length(string);
pad=8-mod(len,8);
ifpad>
string=[stringuint8(zeros(1,pad))];
codeword=codeword(symbols);
codelen=zeros(size(codeword));
weights=2.^(0:
23);
maxcodelen=0;
length(codeword)
len=length(codeword{index});
iflen>
maxcodelen
maxcodelen=len;
end
code=sum(weights(codeword{index}==1));
code=bitset(code,len+1);
codeword{index}=code;
codelen(index)=len;
codeword=[codeword{:
}];
%¼
cols=length(string)/8;
string=reshape(string,8,cols);
7);
zipped=uint8(weights*double(string));
%Â
æ
huffcodes=sparse(1,1);
nnz(codeword)
huffcodes(codeword(index),1)=symbols(index);
%Ì
ù
info.pad=pad;
info.huffcodes=huffcodes;
info.ratio=cols./length(vector);
info.length=length(vector);
info.maxcodelen=maxcodelen;
info.rows=m;
info.cols=n;
edithuffdecode
functionvector=huffdecode(zipped,info,image)
if~isa(zipped,'
%²
0,1Ð
Î
Ú
len=length(zipped);
string=repmat(uint8(0),1,len.*8);
bitindex=1:
8;
len
string(bitindex+8.*index-1))=uint8(bitget(zipped(index),bitindex));
string=logical(string(:
string(len-info.pad+1):
end)=[];
%¿
51);
vector=repmat(uint8(0),1,info.length);
vectorindex=1;
codeindex=1;
code=0;
code=bitset(code,codeindex,string(index));
codeindex=codeindex+1;
byte=decode(bitset(code,codeindex),info);
ifbyte>
vector(vectorindex)=byte-1;
codeindex=1;
code=0;
vectorindex=vectorindex+1;
vector=reshape(vector,info.rows,info.cols);
editbyte
functionbyte=decode(code,info)
byte=info.huffcodes(code);
clear
loadwoman;
data=uint8(X);
[zipped,info]=huffencode(data);
unzipped=huffdecode(zipped,info);
subplot(1,2,1);
imshow(data);
subplot(1,2,2);
imshow(unzipped);
erms=compare(data(:
),unzipped(:
))
cr=info.ratio
whosdataunzippedzipped
fuctionerms=compare(f1,f2)
e=double(f1)-double(f2)
[m,n]=size(e);
eras=sqrt(sum(e(:
))^2/(m*n))
functioncr=imageratio(f1,f2)
error(nargchk(2,2nargin))
cr=bytes(f1)/bytes(f2)
functionb=bytes(f2)
ifischar(f)
info=dir(f)
b=info.bytes
elseif=isstruct(f)\
b=0
fields=fieldnames(f)
fork=1:
length(fileds)
b=b+bytes(f.(fileds))
else
info=whos('
f'
clea