数字图像处理实验报告(二)

报告目录

实验四、图像复原

 实验五、图像压缩及编码


实验四、图像复原

一、实验目的

  1. 了解图像复原的意义和手段;
  2. 熟悉图像退化成因及处理方法;
  3. 通过实验了解不同图像退化模型的特点;
  4. 通过本实验掌握利用MATLAB建立图像退化模型并进行复原的方法;

二、实验环境

MATLAB 2014以上版本、Win 8\10\11 系统

三、实验原理

图像的退化及复原可视作如下过程:

数字图像处理实验报告(二)_第1张图片

图像复原的目的是利用退化过程的先验知识,恢复图像原本的面目。图像复原模型可以用连续数学和离散数学处理,处理项的实现可在空间域卷积,或在频域相乘以模拟图像降质的过程,并且逆向处理退化过程以复原图像。

涉及函数:imread、figure、imshow、subplot、rgb2gray、fspecial、ifft2、abs、uint8、imfilter、

四、实验内容

(1)新建一个m文件,从桌面示例图像文件夹中读取一张彩色图像,转换为灰度图,使用fspecial函数对图像进行退化处理,结果展示在同一界面,标题分别为“原图”、“灰度图”、“退化图像”。

 clc;clear;close all

I=imread('V.jpg');

subplot(131),imshow(I),title('原图')

A=rgb2gray(I);

subplot(132),imshow(A),title('灰度图')

PSF=fspecial('motion',10,20);

Blurred=imfilter(A,PSF,'circular','conv');

subplot(133),imshow(Blurred),title('退化图像')

数字图像处理实验报告(二)_第2张图片 

 (2)读取一张彩色图像,转换为灰度图,fspecial及imfilter函数实现多种模糊,包括运动模糊、圆盘状模糊、钝化模糊,并在一个figure窗口同时展示,标题分别为“原图”、“运动模糊”、“圆盘状模糊”、“钝化模糊”。观察模糊前后图像,及对应图像矩阵的变化。

clc;clear;close all

I=imread('V.jpg');

subplot(221),imshow(I),title('原图')

A=rgb2gray(I);

H1=fspecial('motion',10,20);

MotionBlur=imfilter(A,H1);

subplot(222),imshow(MotionBlur),title('运动模糊图像')

H2=fspecial('disk',10);

bulrred=imfilter(A,H2);

subplot(223),imshow(bulrred),title('圆盘模糊图像')

H3=fspecial('unsharp');

Sharpened=imfilter(A,H3);

subplot(224),imshow(Sharpened),title('钝化模糊图像')

数字图像处理实验报告(二)_第3张图片

(3)读取一张彩色图像并转换为灰度图,先进行一次退化,增加高斯或椒盐噪声,接着对图像进行逆滤波复原,对比变换前后图像特征。同一个figure窗口中输出,标题分别为“原图”、“退化图像”,“加噪图像”,“逆滤波复原”。

clc;clear;close all

I=imread('V.jpg');

subplot(221),imshow(I),title('原图')

A=rgb2gray(I);

[m,n]=size(A);

F=fftshift(fft2(A));

k=0.0001;

H=[];

for u =1:m

    for v=1:n

        q=((u-m/2)^2+(v-n/2)^2)^(5/6);

        H(u,v)=exp((-k)*q);

    end

end

G=F.*H;

A0=abs(ifft2(fftshift(G)));

subplot(222),imshow(uint8(A0)),title('退化图像')

B=imnoise(uint8(A0),'salt & pepper',0.04);

subplot(223),imshow(B),title('加噪图像')

F0=fftshift(fft2(B));

F1=F0./H;

A2=ifft(fftshift(F1));

subplot(224),imshow(uint8(A2)),title('逆滤波图像')

数字图像处理实验报告(二)_第4张图片

(4)读取一张彩色图像并转换为灰度图,先进行图像退化处理,接着使用deconvwnr函数进行维纳滤波复原。上述结果在同一figure中显示,标题分别为“原图”、“模糊后图像”、“恢复后图像”。

clc;clear;close all

I=imread('V.jpg');

subplot(131),imshow(I),title('原图')

A=rgb2gray(I);

PSF=fspecial('motion',10,20);

MF=imfilter(A,PSF,'circular','conv');

subplot(132),imshow(MF),title('退化图像')

wnr=deconvwnr(MF,PSF);

subplot(133),imshow(wnr),title('修复后图像')

数字图像处理实验报告(二)_第5张图片

(5)读取一张彩色图像并转换为灰度图,先进行一种模糊处理,接着使用deconvblind函数对图像进行盲去卷积滤波复原,在相同figure中输出,标题分别为“原图”、“模糊后图像”、“恢复后图像”。

clc;clear;close all

I=imread('V.jpg');

subplot(131),imshow(I),title('原图')

A=rgb2gray(I);

PSF=fspecial('motion',10,20);

Blurred=imfilter(A,PSF,'circular','conv');

INITPSF=ones(size(PSF));

subplot(132),imshow(Blurred),title('退化图像')

[J P]=deconvblind(Blurred,INITPSF,20);

subplot(133),imshow(J),title('修复后图像')

数字图像处理实验报告(二)_第6张图片

 实验五、图像压缩及编码

一、实验目的

  1. 了解图像压缩及编码的意义和手段;
  2. 了解图像压缩编码技术的基本知识、评价标准;
  3. 掌握图像压缩编码技术的几种编码技术基本原理、实现步骤;
  4. 了解什么是JPEG 标准;
  5. 熟悉小波变换的基本原理、实现步骤;
  6. 理解基于小波变换的图像水印技术是如何实现的。

二、实验环境

MATLAB 2014以上版本、Win 8\10\11 系统

三、实验原理

1.图像压缩原理

图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。

应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:

(1)无损压缩编码种类

哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。

(2)有损压缩编码种类

预测编码,DPCM,运动补偿;

频率域方法:正交变换编码(如DCT),子带编码;

空间域方法:统计分块编码;

模型方法:分形编码,模型基编码;

基于重要性:滤波,子采样,比特分配,向量量化;

混合编码。

有JBIG,H261,JPEG,MPEG等技术标准。

涉及函数:imread、figure、imshow、subplot、rgb2gray、imwrite、imfinfo、huffmandeco、dctmtx、uint8、wcodemat

四、实验内容

(1)新建一个m文件,从桌面示例图像文件夹中读取一张彩色图像,转换为灰度图,使用imfinfo函数对读取图像属性信息,并计算图像的压缩比。

clc;clear;clear all;

% 读取图像并转换为灰度图像

img = imread('V.jpg');

gray_img = rgb2gray(img);

% 使用 imfinfo 函数获取图像属性信息

info = imfinfo('V.jpg');

width = info.Width;

height = info.Height;

bit_depth = info.BitDepth;

% 计算图像的压缩比

original_size = width * height * bit_depth;

compressed_size = numel(gray_img) * 8;

compression_ratio = original_size / compressed_size;

% 显示压缩比

fprintf('压缩比: %.2f\n', compression_ratio);

数字图像处理实验报告(二)_第7张图片

(2)读取一张彩色图像,转换为灰度图,使用dct2函数执行二维DCT变换,接着使用idct2重构图像,定义归一化标准K将重构结果进行归一化,上述结果在一个figure窗口同时展示,标题分别为“原图”、“灰度图像”、“二维DCT变换”、“重构图像”。观察二维DCT变换及归一化前后图像,及对应图像矩阵的变化。

clc;clear;close all;

I=imread('V.jpg');

figure

subplot(221),imshow(I),title('原图像')

J=rgb2gray(I);

subplot(222),imshow(J),title('灰度图')

K=dct2(J);

subplot(223),imshow(log(abs(K)),[]),colormap(jet(64)),colorbar

title('二维DCT变换')

K(abs(K)<10)=0;

L=idct2(K);

subplot(224),imshow(L,[0,255]),title('重构图像')

数字图像处理实验报告(二)_第8张图片

 (3)读取一张彩色图像并转换为灰度图,使用dctmtx函数先产生二维DCT变换矩阵,后利用DCT变换对图像进行压缩,结果在同一个figure窗口中输出,标题分别为“原图”、“压缩图像”,对比压缩前后的图像矩阵变化。

  clear

      close all

      clc%清理Matlab窗口

    A=imread('V.jpg');%读取图像x.jpg(引号内是图像在计算机内的存储路径)

      I=rgb2gray(A);%RGB图像转灰度图像

      I=im2double(I);

      T=dctmtx(8);%得到一个8*8的离散余弦变化矩阵

      B=blkproc(I,[8 8],'P1*x*P2',T,T');

      %x是每一个分成的8*8大小的块

      %P1*x*P2相当于像素块的处理函数

      %p1=T,p2=T’,fun=p1*x*p2'=T*x*T'是进行离散余弦变换

    m=[1 1 0 0 0 0 0 0

    1 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0];%保留左上角3个系数

    B2=blkproc(B,[8 8],'P1.*x',m);%舍弃每个块中的高频系数,达到图像压缩的目的

    I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行反余弦变换,得到压缩后的图象

    miss=abs(I-I2);

    figure(1);

    subplot(1,2,1);

    imshow(I),title('原始图像');

    subplot(1,2,2);

    imshow(I2),title('压缩(解压缩)图像(3个系数)');

 数字图像处理实验报告(二)_第9张图片

 (4)读取一张彩色图像并转换为灰度图,使用huffmandict函数进行Huffman编码。上述结果在同一figure中显示,标题分别为“原图”、“Huffman处理后图像”。

clc;clear;close all

I=imread('V.jpg');

GrayI=rgb2gray(I);

[M,N]=size(GrayI);

subplot(121),imshow(I),title('原图像')

GrayI=GrayI(:);

s=0:255;

for i=0:255

    p(i+1)=length(find(GrayI==i))/(M*N);

end

dict=huffmandict(s,p);

enco=huffmanenco(GrayI,dict);

deco=huffmandeco(enco,dict);

deco=col2im(deco,[M,N],[M,N],'distinct');

subplot(122),imshow(uint8(deco)),title('哈夫曼处理后的图像')

数字图像处理实验报告(二)_第10张图片

 (5)读取一张彩色图像并转换为灰度图,利用小波变化的时频局部化特性对图形进行压缩。(拓展:利用该思路加水印)

clc; clear;close all;    

data =imread('V.jpg');   

data=rgb2gray(data); whos('data');

figure; imshow(data);

title('原始图像');

% 小波分解

[c,s]=wavedec2(data,2,'sym3');

cA1=appcoef2(c,s,'sym3',1);%尺度1的低频系数

cA2=appcoef2(c,s,'sym3',2);%尺度2的低频系数

[cH1,cV1,cD1]=detcoef2('all',c,s,1);%尺度1的所有方向的高频系数H水平,V垂直,D对角

[cH2,cV2,cD2]=detcoef2('all',c,s,2);%尺度2的所有方向的高频系数

% wrcoef2  Reconstruct single branch from 2-D wavelet coefficients.

figure;

subplot(3,3,1); imshow(uint8(cA1));title('尺度1的低频系数图像'); %uint8的范围是0-255,转换

subplot(3,3,2); imshow(uint8(cA2));title('尺度2的低频系数图像');

subplot(3,3,4); imshow(uint8(cH1));title('尺度1水平方向高频系数图');

subplot(3,3,5); imshow(uint8(cV1));title('尺度1垂直方向');

subplot(3,3,6); imshow(uint8(cD1));title('尺度1斜线方向');

subplot(3,3,7); imshow(uint8(cH2));title('尺度2水平方向高频系数图');

subplot(3,3,8); imshow(uint8(cV2));title('尺度2垂直方向');

subplot(3,3,9); imshow(uint8(cD2));title('尺度2斜线方向');

%进行图像压缩

%第一层

cA1=wcodemat(cA1,192,'mat',0); %对矩阵进行量化编码

figure; subplot(121);

imshow(cA1,[]);  %将指定范围的灰度值变换到0-255区间显示

title('第一次压缩图像');

%第二层

cA2=wcodemat(cA2,192,'mat',0);

subplot(122); imshow(cA2,[]);

title('第二次压缩图像');

cA1=uint8(cA1);

cA2=uint8(cA2);

disp('第一次压缩后图像的大小:'); whos('cA1');

disp('第二次压缩后图像的大小:'); whos('cA2');

数字图像处理实验报告(二)_第11张图片

数字图像处理实验报告(二)_第12张图片 

 

你可能感兴趣的:(matlab,图像处理,开发语言)