matlab图像大作业,MATLAB图像大作业

【实例简介】

Matlab 图像处理 人脸识别 等等 包括 jpeg仿真。。。

end

end

end

back=)*examplekd'i

end

得到的 differenc最大值为1.232902668846236e-12,可以忽略不计,所以两者功能

基本相同,只不过库函数可以计算非方阵的矩阵。

3.如果将DCT系数矩阵中右侧四列的系数全部置零,逆变换后的图像会发生什么变化?选

取一块图验证你的结论。如果左侧的四列置零呢?

相关程序如下

clear all close all clc

load( UpegCoert mat ' )i

load( hall. mat)i

middle-dct2 (double (hall gray)-ones(size(hall gray))x128

[×y]=size(m1ddle)

middle=[zeros(x, 4),middle(:(5:y))]i

middle=[middle(:,(1:(y-4))),zeros(x, 4

transform-idct2(middle)+ones(size (middle))*128

trans forml=idct2(middlel)+ones(size(middle))*128;

transform2=idct(middle)+ones(size(middle))*128i

fiqure

imshow(uint8(transform))i

王 Igure;

imshow (uint8(transform))i

Figure

imshow(uint8(transfor n2))i

左侧置零后图像,明显变灰

右侧置零后图像,没有太大改变

Ti置

岀现上述情况的原因是,αs变换后左侧有很多直流分量,置零后,会使图像像128靠近,

所以会变灰,而右侧较多高频分量,置零后,虽然会减少图像的高频分量,但人眼对高频分

量并不敏感,所以会感觉图像变化不大。

4.若对D冖系数分别做转置、旋转90度和旋转180度操作(ot90),逆变换后恢复的

图像有何变化?选取一块图验让你的结论。

相关程序如下

clear al, close all, clc

load( hall. mat)i

middle=dct2(double (hall gray)-128)i

middle=rotg0(middle)i

middle=rotg0(middle, 2)i

tt=icct2(middle)+128;

transform=idct2(middle)+128;

transform=idct(middle)+128

transform2=idct2(middle)+128;

figure;

imshow(uint8(transform))i

figure

imshow(uint8(transform1))i

± Igure;

imshow(uint8(transform2))i

得到如下结果

转置

旋转90

旋转180

5.如果认为差分编码是一个系统,请绘出这个系统的频率响应,说明它是一个高通滤波器。

nC系数先进行差分编码再进行熵编码,说明DC系数的高频频率分量更多

相关程序为

clear all, close all clc;

fxeq2([-11,1);

我们得到这个滤波器的频率响应如下

20

40

E

0.2030.4050.507080g

normalized fres

y(xπ rad/sample)

1

-15

D.10.2彐口.4口

Normalized Frequency(xπ rad/sample〕

可见此滤波器为高通滤波器。

6.DC预测误差的取值和 Category值有何关系?如何利用预测误差计算出其

Category

如果DC系数为0,则 Category为0,若DC系数不为0,那么

Category=floor(log2(abs(DC(count)))+1

7.你知道哪些实现zig-zag打描的方法?请利用 MATLAB的强大功能设计一种最佳方法

这个没有想到如何利用经优化过的矩阵算法进行运算,根据定义,我们可以得到如下程序

function [back]= zigzag(example)

back=zeros(64,1);

sed

6;8,13,19,24,34,38,49,7,14,18,25,33,39,48,50

15;17,26,32,40,47,51,58,16,27,31,41,46,52;57,59,,,

28;30,42,45,53;56,60,63,29,43,44,54,55,61;62,64];

a=zeros(64, 1)

t=1:8

((count-1)x8+1: count*8)-example(:, count)i

end

t=1:64

back(seg(count))=a(count)

end

end

以及逆 ZIgZag程序

function [back]= inv zigzag(example)

back=zeros(8,8)i

seq=[1,3,4,-0;11,21,22,36,2;5,9,12,20,23;35,37,

···

6,8,13,19,24;34;38,49,7,1418,25,33,39,48,50

15;17,26,32,40;47,51;58,16,27,31,41,46,5257,59

28,30,42,45,53,56,60,63,29,43,44,54,55,61;62,64];

middle=zeros(64,1)i

for count=1: 64

middle(count)=example(seg(count))i

end

for count=1: 8

back(: count)=middle((count-1)*B+l: count*8);

end

8.对测试图像分块、DCT和量化,将量化后的系数写成矩阵的形式,其中每一列为一个块

的DC系数zig-2ag扫描后形成的列矢量,第一行为各个块的DC系数。

相关程序如下

clear all, close all, clc

load(' Jpegcoetf. mat')i

load hall. mat hall gray

Th l]=size(hall gray)i

h

ei1(h/8)

1-8*cei1(1/8);

若图像横纵不为8的倍数,则要补全

example= zeros(h,1)氵

Th l=size hall gray)i

example(l: h, 1: 1)=hall grayi

example=double(example)-128

answer=zeros(64, ceil(h/8)ceil(1/8));

for count=l: ceil(h/8)

for count2=1: ceil(1/8)

answer(:(count-1)*ceil(1/8)+count2)

zigzag(round ((dct2(example((count-1)*8+1: count*8,(count2-1)*8+1: count

8))./QTAB)))

end

end

9.请实现本章介绍的EG编码(不包括写JFIF文件),输出为DC系数的码流、AC系

数的码流、图像高度和图像宽度,将这四个变量写入 Gpegcodes.mat文件。

相关程序如下

T28

[h l]=size(answer)i

DC-answer(l:

差分运算如下

for count=2: 1

DC(count)=answer(l, count-1)-answer(l, count)i

end

CCCcde-[]

fo≌ count=1:1

号找出cate,确定huff编码

DC (count)==0

cate=1

el se

cate=floor(log2(abs(DC (count)))+2)i

end

huff-DCtAB (cater 2: DCTAB(cater 1)+1)

coo-trans(DC(count))

DCCoce=[decode huff cooli

nd

DCCcce=logical(DECode)i

ACCede=[]

AC=answer(2:64:

n=0

last=find(ac(: count2)=0, l, 'last)i

for count=1:last

if AC(count count2)==0

t run>=l5

ACCode= [ACCode 111111]i

un=0;

run=run+1

end

else

找出huf编码

if AC(count count2)==-1 AC(count, count2)==

cate=1

e⊥se

ate==lcor(log2(abs(AC(

,Cunt2)))+1)

end

ans(AC(count

ACCode=[ACCode

ACTAB(run*10+cate, 4: ACTAB(run*10+cate, 3)+3)

end

ACCcCe=[ACCode 10 1]

en

ACCCCe=logical(AcCode)

Th 1]-size(hall gray)i

save jpegcodes mat DCCode ACCode h 1

进制转换

function [back trans( num

middle=dec2bin(abs(um))i

n-flcor(log2(abs(num)))+li

back=zeros(l, n)

for count=1: n

back(count)=str2num(middle(count))i

end

if num<0

back=back

end

back=double(back

号若num=0,那么要强制back=[0],否则会出现空阵

if

end

end

10.计算压缩比(输入文件长度/输出码流长度),注意转换为相同进制。

ACCode长度为23073, DECode长度为2054,原图大小为120*168米8

所以压缩约比为6.4186

11.请实现本章介绍的JPEG解码,输入是你生成的 jpegcodes.mat文件ε分别用客观(PSR

和主观方式评价编解码效果如何

相关程序如下

clear all, close all, clc

load(' ipegcodes. mat)

load( JpegCoeff. mat')i

各确定相关hu前缀需要向后读入的位数

CCTAE=[[1;1;2;3;4;6;7;8;9;10;11]DCAB];

ge=length(decode)i

count=li

while count<=ge

flag=0i

run=run+1

now=[now DCCode(count)]i

名确定相关长度的huFf编码

d (DCTAB(: 2)

for court2=1: length(po)

若与huff编码相同则读出应向后读入的位数

f double(now)=-dCTA3(po(count2),3: 3+DCTAB (po(count2),2)-1)

10-DCTA3(oo(count2),1)i

break;

if flag--1

确定DC编码

middle=DCCode(coun=+1: count+lo);

DC=[DC 0]i

else

DC=[DC inv trans(middle)]i

end

count=count+loi

now-

run=0;

end

count=count+1

end

AC=zeros(63, ceil(h/B)*ceil(1/8))i

ge=length(ACCode)i

count=l

[];

wherearewe=li

while count<=ge

号寻找AC编码与DC大致相同

run-run+l;

now=Lnow ACCode(count)i

po=fird(ACTAB(: 3)==run)i

for count2=1: length(p

f double(now)==AcTAB(po(count2),4: 4+run-1

【实例截图】

【核心代码】

你可能感兴趣的:(matlab图像大作业)