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

news2024/12/25 0:13:30

报告目录

实验四、图像复原

 实验五、图像压缩及编码


实验四、图像复原

一、实验目的

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

二、实验环境

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

三、实验原理

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

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

涉及函数: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)读取一张彩色图像,转换为灰度图,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)读取一张彩色图像并转换为灰度图,先进行一次退化,增加高斯或椒盐噪声,接着对图像进行逆滤波复原,对比变换前后图像特征。同一个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)读取一张彩色图像并转换为灰度图,先进行图像退化处理,接着使用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)读取一张彩色图像并转换为灰度图,先进行一种模糊处理,接着使用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('修复后图像')

 实验五、图像压缩及编码

一、实验目的

  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);

(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('重构图像')

 (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个系数)');

 

 (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('哈夫曼处理后的图像')

 (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');

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux CentOS7 keepalived+LVS(DR)搭建部署

目录 一、服务器准备 二、操作步骤 1.部署web服务器 2.部署LVS主备调度器 测试 部署NFS共享服务器 一、服务器准备 .准备6台虚拟机&#xff0c;2台做LVS主备调度器&#xff0c;2台做web服务器&#xff0c;1台做存储&#xff0c;1台客户机验证 1.LVS主调度器 &#xff08…

20个你应该掌握的强大而有用的正则表达式

关注“大前端私房菜”微信公众号&#xff0c;回复暗号【面试宝典】即可免费领取107页前端面试题。 正则表达式是一种很强大的字符串模式匹配工具。掌握常见的正则表达式可以大大提高我们在字符串操作和文本处理上的效率。 1.货币格式化 我经常需要在工作中使用到格式化的货币&…

哈希及其哈希思想的应用

1. unordered 系列关联式容器 在 C98 中&#xff0c; STL 提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到 $log_2 N$ &#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询…

Ubuntu20.04,samba服务器搭建。

0.前言 推荐个电视剧吧&#xff0c;百看不厌&#xff0c;《雍正王朝》。 这篇博客没什么技术含量&#xff0c;纯粹的表现一下我的勤劳。 1.Ubuntu 安装 终端输入 $ sudo apt install samba samba-common 配置需要共享的目录 # 新建目录&#xff08;自定义&#xff09;&am…

CarFramework打造无缝用户体验:提升汽车信息娱乐和控制

CarFramework框架解析 CarFramework&#xff08;汽车框架&#xff09;是Android Automotive平台上的一个关键框架&#xff0c;它提供了专门针对车辆应用程序开发的功能和工具。CarFramework通过提供一组API和服务&#xff0c;简化了与车辆硬件和车辆特定功能的交互。 CarFram…

被ChatGPT骗了!再用ChatGPT可要小心了。

被ChatGPT戏耍的周末 1. 被ChatGPT戏耍全过程2. 拆穿ChatGPT的把戏3. AIGC与内容安全 1. 被ChatGPT戏耍全过程 电动垂直起降飞行器&#xff08;eVTOL&#xff0c;Electric Vertical Takeoff and Landing&#xff09;技术越来越成熟&#xff0c;为了解下相关产品我周末打开了Cha…

Android Java判断密码强度 强度显示

1&#xff0c;正则表达式 密码强度的正则表达式 public static final String WEAK_PATTERN "(^(?.*[0-9])(?.*[a-z])[0-9a-z]{6,18}$)|(^(?.*[0-9])(?.*[A-Z])[0-9A-Z]{6,18}$)";//全数字字母&#xff08;大/小&#xff09;public static final String MEDIUM_…

61、基于51单片机无线蓝牙音乐喷泉控制系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

MySql基础教程(一):创建删除选择数据库

MySql基础教程(一)&#xff1a;创建删除选择数据库 1、创建数据库 创建一个名为 CSDN 的数据库 CREATE DATABASE CSDN;执行成功&#xff0c;数据库CSDN创建成功。 2、删除数据库 删除名为 CSDN 的数据库 DROP DATABASE CSDN;执行成功&#xff0c;CSDN数据库删除成功。 3…

【Java技术专题】「入门到精通系列教程」零基础带你认识网络请求工具鼻祖之HttpClient开发实战指南(执行请求篇)

零基础带你认识网络请求工具鼻祖之HttpClient开发实战指南 前言HttpClient的作用HttpClient可以实现什么&#xff1f;HttpClient无法实现什么&#xff1f; HttpClient的使用基础执行请求HTTP 请求查询字符串也可以从独立的参数中来生成 HTTP 响应HTTP 实体实体类型重复实体使用…

重新审视长时间序列预测:关于线性映射的调查

摘要 近年来&#xff0c;长时间序列预测得到了极大的关注。虽然有各种专门的设计来捕捉时间依耐性&#xff0c;但以前的研究表明&#xff0c;与其他复杂的架构相比&#xff0c;单一的线性层可以实现有竞争力的预测性能。在本文中&#xff0c;我们彻底调查了最近提出的方法内在…

微信小程序开发21__Echarts的应用

Echarts 是一个使用JS实现的开源可视化库&#xff0c; 其官网是 https://echarts.apache.org . 它提供了常规的折线图、柱状图、散点图、饼图、K线图等&#xff0c; 还支持图与图之间的混搭。 Echarts 的微信小程序版本的Github为 https://github.com/ecomfe/echarts-for-…

MySQL数据库日志管理、备份与恢复

目录 一、MySQL 日志管理 二、数据备份的重要性 造成数据丢失的原因 三、数据库备份的分类 1 、从物理与逻辑的角度 &#xff08;1&#xff09;备份划分 &#xff08;2&#xff09; 物理备份方法 2、 从数据库的备份策略角度 四、常见的备份方法 1、物理冷备 2、专用备…

天气热了,三叔请你吃瓜

目录 前言预备知识画一个完整的西瓜加些纹路切西瓜参考资料前言 六月份转眼就过去一半了,气温逐渐走高,每次经过小区门口的时候都会被那家水果店铺的吆喝声吸引住,“正宗南汇8424西瓜只要3元一斤啦”,每每都想冲进店里抱一个回来,可碍于囊中羞涩,只好作罢,晚餐过后闲暇…

Postman | 一分钟掌握Pre-request Script | 外部库的使用

简介 Postman内部提供了13种外部库&#xff0c;可以直接在前置请求脚本和后置请求脚本中使用&#xff0c;如果需要其他外部库&#xff0c;只需要使用如下方式引入即可&#xff1a; require(moduleName:String):function → * 一些内部库使用的例子 postman可用的外部库官网列…

[第一章 web入门]afr

afr_1 题目开头已经提示说是任意文件读取漏洞 所以这里还需要复习一下php伪协议php://filter 的作用 读取源代码并进行base64编码输出&#xff0c;不然传入的参数会直接当做php代码执行就看不到源代码内容了。php://filter即使在allow_url_fopen和allow_url_include双off情况下…

Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口

Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口 文章目录 Day21 实战篇——Jmeter接口测试之案例实战——添加线程组、添加HTTP请求、获取所有学生接口1、添加线程组2、添加HTTP请求3、获取所有学生接口3.1 Jmeter察看结果树中乱码:…

03_运行时数据区

目录 一、概述二、线程1、JVM系统线程 一、概述 二、线程 1、JVM系统线程

调用万维易源API实现天气预测

目录 1. 作者介绍2. 关于理论方面的知识介绍2.1 天气预测简介2.2 预测方法 3. 代码实现3.1 需要安装的包3.2 部分代码3.3 实验结果 1. 作者介绍 房庚晨&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;22级研究生 研究方向&#xff1a;机器视觉与人工智能 电子…

【数据库四】MySQL备份与恢复

MySQL备份与恢复 1.数据库备份的分类1.1 数据备份的重要性1.2 数据库备份的分类1.3 常见的备份方法 2.MySQL完全备份与恢复2.1 MySQL完全备份2.2 数据库完全备份分类2.3 MySQL物理冷备份及恢复2.4 数据迁移DST2.5 mysqldump进行逻辑备份2.5.1 mysqldump备份数据库2.5.2 mysqldu…