实验5 彩色图像处理与图像变换

news2024/11/26 16:49:21

文章目录

      • 一、实验目的
      • 二、实验内容
        • 1. 彩色图像平滑。(课本P310 例6.12)
        • 2. 彩色边缘检测。(课本P318 例6.16)
        • 3. 一维小波变换。(课本P364 例7.20)
        • 4. 二维小波变换。(课本P369 例7.22)
        • 5. 小波包分解。(课本P376 例7.24)

一、实验目的

  1. 掌握RGB彩色模型和HSI彩色模型之间的转换方法,以及彩色图像的平滑方法。
  2. 掌握彩色图像边缘检测的方法。
  3. 掌握一维和二维信号的单尺度和多尺度小波变换。
  4. 掌握小波包分解的方法。

二、实验内容

1. 彩色图像平滑。(课本P310 例6.12)

图1显示了一幅RGB图像,请进行以下操作:
(1) 显示图1的红、绿、蓝分量图像。
(2) 显示图1的H、S、I分量图像。
(3) 用大小为 5 × 5 5\times 5 5×5 的平均核分别对图1的R、G、B分量进行平滑,然后混合这些独立平滑后的图像以形成平滑后的全彩色图像。
(4) 保持图1的H分量和S分量不变,仅用大小为 5 × 5 5\times 5 5×5 的平均核对I分量进行平滑,然后把最终的HSI转换成RGB图像以便显示。
(5) 求(3)和(4)中所得到的两幅图像的差值。
(6) 分析实验结果。
在这里插入图片描述

答:
(1)
(2)

%色调分量
numerator=0.5*((R-G)+(R-B));
denominator=sqrt((R-G).^2+(R-B).*(G-B));
theta=acos(numerator./(denominator+eps));

H = zeros(size(f(:,:,1)));
H(B > G) = 2*pi - theta(B > G);
H(B <= G) = theta(B <= G);
H=H/(2*pi);

%饱和度分量
min_val=min(R,min(G,B));
S=1-3./(R+G+B).*min_val;

%亮度分量
I=1/3*(R+G+B);
subplot(1,3,1);imshow(H);title('色调分量','FontSize',15);
subplot(1,3,2),imshow(S);title('饱和度分量','FontSize',15);
subplot(1,3,3),imshow(I);title('亮度分量','FontSize',15);

在这里插入图片描述
(3)

%用大小为5×5的平均核分别对图1的R、G、B分量进行平滑

% 定义平均核
kernel = ones(5, 5) / 25;

% 对每个通道应用平滑核
red_channel = imfilter(R, kernel, 'replicate');
green_channel = imfilter(G, kernel, 'replicate');
blue_channel = imfilter(B, kernel, 'replicate');

% 合并三个通道
smoothed_img = cat(3, red_channel, green_channel, blue_channel);

% 显示结果
imshow(smoothed_img);

在这里插入图片描述
(4)

在这里插入图片描述
(5)

%没有定标时,图片接近0,不是特别清晰
smoothed_img=im2uint8(smoothed_img);
diff=smoothed_img-rgb;
subplot(1,2,1);imshow(diff);title('未调整I分量之后的diff图','FontSize',13);

%将图片重新定标,使得图像更加清晰

% 转换数据类型为double
diff = im2double(diff);
% 仅对I通道执行调整
hsi=rgb_to_hsi(diff);
I=hsi(:,:,3);
I = imadjust(I);
hsi(:,:,3)=I;

diff=hsi_to_rgb(hsi);
subplot(1,2,2);imshow(diff);title('调制I分量之后的diff图','FontSize',13);


function rgb = hsi_to_rgb(hsi)
hsi=im2double(hsi);
H=hsi(:,:,1)*2*pi;
S=hsi(:,:,2);
I=hsi(:,:,3);
R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));
%RG 扇区 (0<=H<2*pi/3)
c=find((0<=H) & (H<2*pi/3));
B(c)=I(c).*(1-S(c));
R(c)=I(c).*(1+S(c).*cos(H(c))./cos((pi/3)-H(c)));
G(c)=3*I(c)-(R(c)+B(c));
%BG 扇区 (2*pi/3<=H<4*pi/3)
c=find((2*pi/3<=H) & (H<4*pi/3));
R(c)=I(c).*(1-S(c));
G(c)=I(c).*(1+S(c).*cos(H(c)-2*pi/3)./cos(pi-H(c)));
B(c)=3*I(c)-(R(c)+G(c));
%BR 扇区 (4*pi/3<=H<2*pi)
c=find((4*pi/3<=H) & (H<2*pi));
G(c)=I(c).*(1-S(c));
B(c)=I(c).*(1+S(c).*cos(H(c)-4*pi/3)./cos((5*pi/3)-H(c)));
R(c)=3*I(c)-(B(c)+G(c));

rgb=cat(3,R,G,B);
rgb=im2uint8(rgb);
end

function hsi=rgb_to_hsi(rgb)
R=rgb(:,:,1);
G=rgb(:,:,2);
B=rgb(:,:,3);

%色调分量
numerator=0.5*((R-G)+(R-B));
denominator=sqrt((R-G).^2+(R-B).*(G-B));
theta=acos(numerator./(denominator+eps));

H = zeros(size(rgb(:,:,1)));
H(B > G) = 2*pi - theta(B > G);
H(B <= G) = theta(B <= G);
H=H/(2*pi);

%饱和度分量
min_val=min(R,min(G,B));
S=1-3./(R+G+B).*min_val;

%亮度分量
I=1/3*(R+G+B);


hsi=cat(3,H,S,I);
hsi=im2uint8(hsi);
end

在这里插入图片描述
(6)
可以看到,在RGB色彩模型中对彩色图像做平滑滤波,每个像素的颜色都是邻域中像素的平均颜色。而HSI彩色模型中仅对亮度分量做平均,解除了亮度和色彩信息的联系。两种平滑方法的区别会随着核的增大而变得更为明显。

2. 彩色边缘检测。(课本P318 例6.16)

(1) 请在RGB向量空间中计算图1的梯度。
(2) 请求图1的3幅分量图像的梯度,并通过在每一坐标点 处叠加相应的3幅分量图像的梯度值,合成一幅梯度图像。
(3) 请求(1)和(2)中所得的两幅梯度图像的差的绝对值。

答:

close all; clear all; clc;
f=imread('1.Lena.tif');
f=im2double(f);
% Sobel 算子
sobel = fspecial('sobel');
sv = sobel';
sh = sobel; 
% 计算 X、Y 方向梯度
Rx = imfilter(f, sv, 'replicate');
Ry = imfilter(f, sh, 'replicate');
Gx = imfilter(f, sv', 'replicate');
Gy = imfilter(f, sh', 'replicate');
Bx = imfilter(f, sv, 'replicate') + imfilter(f, sv', 'replicate');
By = imfilter(f, sh, 'replicate') + imfilter(f, sh', 'replicate');
% 计算 gxx、gyy 和 gxy
gxx = sum(cat(3, Rx, Gy, Bx).^2, 3);
gyy = sum(cat(3, Ry, Gy, By).^2, 3);
gxy = sum(cat(3, Rx, Gy, Bx) .* cat(3, Ry, Gy, By), 3);
% 计算 theta
theta = 0.5 * atan(2*gxy./(gxx - gyy + eps));
%计算 F
F1=sqrt(1/2*((gxx+gyy)+(gxx-gyy).*cos(2*theta)+2*gxy.*sin(2*theta)));
theta1=theta+pi/2;
F2=sqrt(1/2*((gxx+gyy)+(gxx-gyy).*cos(2*theta1)+2*gxy.*sin(2*theta1)));
F = max(F1, F2);
F = mat2gray(F);
figure; imshow(F);
imwrite(F,'边缘检测图像.tif');

在这里插入图片描述
(2)

%%
figure;
%R、 G、 B 分量梯度图像
RG=sqrt(Rx.^2+Ry.^2);
subplot(131); imshow(RG(:,:,1),[]);title('R分量图像梯度');
GG=sqrt(Gx.^2+Gy.^2);
subplot(132); imshow(GG(:,:,2),[]);title('G分量图像梯度');
BG=sqrt(Bx.^2+By.^2);
subplot(133); imshow(BG(:,:,3),[]);title('B分量图像梯度');
%叠加成一幅梯度图像
F3=RG + GG + BG;
F3=mat2gray(F3);
figure; imshow(F3);
imwrite(F3,'3 幅分量图像叠加的边缘检测图像.tif');

在这里插入图片描述
(3)

%两幅梯度图像做差
Fd=F-F3;
Fd=abs(Fd);
Fd=mat2gray(Fd);
figure; imshow(Fd);

在这里插入图片描述

3. 一维小波变换。(课本P364 例7.20)

在这里插入图片描述

有一离散函数 f ( x ) = { 1 , 4 , − 3 , 0 } f(x)=\{1,4,-3,0\} f(x)={1,4,3,0} 请根据式(1)所示的哈尔尺度函数系数和式(2)所示的小波函数,请用实验讲义中的两种方法对 进行二尺度小波变换。

h φ ( n ) = { 1 / 2 , n = 0 , 1 0 ,  其他  (1) h_{\varphi}(n)=\left\{\begin{array}{lc} 1 / \sqrt{2}, & n=0,1 \\ 0, & \text { 其他 } \end{array}\right.\tag1 hφ(n)={1/2 ,0,n=0,1 其他 (1)

h ψ ( n ) = { 1 / 2 , n = 0 − 1 / 2 , n = 1 0 ,  其他  (2) h_{\psi}(n)=\left\{\begin{array}{lc} 1 / \sqrt{2}, & n=0 \\ -1 / \sqrt{2}, & n=1 \\ 0, & \text { 其他 } \end{array}\right.\tag2 hψ(n)= 1/2 ,1/2 ,0,n=0n=1 其他 (2)

答:

方法一:

fn = [1,4,-3,0];
h_phi = [1/sqrt(2),1/sqrt(2)];
h_psi = [-1/sqrt(2),1/sqrt(2)];

% 一级小波分解
wf1 = conv(fn,h_psi);%高通细节分量
wf1 = wf1(2:2:end-mod(length(wf1),2));
sca1 = conv(fn,h_phi);%低通尺度分量
sca1 = sca1(2:2:end-mod(length(sca1),2))

% 二级小波分解,对尺度空间V_{J-1}进行分解
wf2 = conv(sca1,h_psi);
wf2 = wf2(2:2:end-mod(length(wf11),2));
sca2 = conv(sca1,h_phi);
sca2 = sca2(2:2:end-mod(length(sca2),2));

方法二:

fn=[1,4,-3,0];
[ca,cd] = dwt(fn,'haar');
[ca1, cd1]=dwt(ca,'haar')

4. 二维小波变换。(课本P369 例7.22)

图2给出了一幅512×512的花瓶和窗台图像,请对其进行以下操作:
在这里插入图片描述
(1) 请求图2的一尺度小波分解后图像。
(2) 请求图2的二尺度小波分解后图像。

答:
(1)

f=imread('4.一幅512×512的图像.tif'); 
f=im2double(f); 
[cA,cH,cV,cD]=dwt2(f, 'haar'); 
cA=mat2gray(cA); 
cH=mat2gray(cH); 
cV=mat2gray(cV); 
cD=mat2gray(cD); 
w=[cA,cH;cV,cD];
figure; imshow(w); 

在这里插入图片描述
(2)

[cA2,cH2,cV2,cD2]=dwt2(cA, 'haar'); 
cA2=mat2gray(cA2); 
cH2=mat2gray(cH2); 
cV2=mat2gray(cV2); 
cD2=mat2gray(cD2);
w1=[cA2,cH2;cV2,cD2];
w2=[w1,cH;cV,cD];
figure;imshow(w2);

在这里插入图片描述

5. 小波包分解。(课本P376 例7.24)

图3给出了一幅扫描的指纹图像,请对其进行二尺度、全小波包分解。

在这里插入图片描述

答:

clear all;close all;clc;
f = imread('5.扫描的指纹图像.tif');
f=im2double(f);
[cA1,cH1,cV1,cD1]=dwt2(f, 'haar');
cA1=mat2gray(cA1);
cH1=mat2gray(cH1);
cV1=mat2gray(cV1);
cD1=mat2gray(cD1);

[cA2,cH2,cV2,cD2]=dwt2(cA1,'haar');
cA2=mat2gray(cA2);
cH2=mat2gray(cH2);
cV2=mat2gray(cV2);
cD2=mat2gray(cD2);
w2=[cA2,cH2;cV2,cD2];

[cA2,cH2,cV2,cD2]=dwt2(cH1,'haar');
cA3=mat2gray(cA2);
cH3=mat2gray(cH2);
cV3=mat2gray(cV2);
cD3=mat2gray(cD2);
w3=[cA3,cH3;cV3,cD3];

[cA2,cH2,cV2,cD2]=dwt2(cV1,'haar');
cA4=mat2gray(cA2);
cH4=mat2gray(cH2);
cV4=mat2gray(cV2);
cD4=mat2gray(cD2);
w4=[cA4,cH4;cV4,cD4];

[cA2,cH2,cV2,cD2]=dwt2(cD1,'haar');
cA5=mat2gray(cA2);
cH5=mat2gray(cH2);
cV5=mat2gray(cV2);
cD5=mat2gray(cD2);
w5=[cA5,cH5;cV5,cD5];

%二尺度分解
wt1=[w2,cH1;cV1,cD1];
figure;imshow(wt1);
%全分解
wall=[w2,w3;w4,w5];
figure;imshow(wall)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

C语言指针的使用

文章目录 前言一、指针基本概念介绍二、指针的大小三、使用指针访问变量和变量地址四、使用指针遍历数组总结 前言 一、指针基本概念介绍 在 C 语言中&#xff0c;指针是一种用于存储内存地址的数据类型。指针可以存储任何数据类型的内存地址&#xff0c;包括基本数据类型、数…

C语言之单链表的实现以及链表的介绍

一、为什么会存在链表 因为我们常用的顺序表会存在以下的一些问题&#xff1a; 1. 中间/头部的插入删除&#xff0c;时间复杂度为O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗。 3. 增容一般是呈2倍的增长&#xff0c;势必会有一定…

算法的特性和空间复杂度---数据结构

目录 前言&#xff1a; 1.算法 1.1算法的特性 1.2设计算法 2.空间复杂度 3.学习复杂度的意义 ❤博主CSDN&#xff1a;啊苏要学习 ▶专栏分类&#xff1a;数据结构◀ 学习数据结构是一件有趣的事情&#xff0c;希望读者能在我的博文切实感受到数据之间存在的关系&#xff…

【3dmax】常用的快捷键总结以及如何修改快捷键

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于建模的笔记 &#x1f236;本篇是3dmax常用的快捷键总结以及如何修改快捷键 3dmax常用的快捷键总结以及如何修改快捷键 3dmax常用快捷键如何添加或修改快捷键 3dmax常用快捷键 视…

go pprof性能调优工具

go pprof 一、性能调优原则二、pprof1、pprof 功能简介2、pprof 排查实战前置工作a、CPUb、Heapc、goroutined、mutexe、block 3、pprof 的采样过程和原理a、cpub、heapc、goroutine && threadCreated、block && mutex 三、调优流程1、业务优化a、流程 2、基础…

2023.4.17-4.23 AI行业周刊(第146期):创业要趁早

最近有很多外部拓展培训的需求&#xff0c;联盟的共学课程培训&#xff0c;公司视觉软件的培训&#xff0c;行业课程的培训&#xff0c;每一项培训听起来简单&#xff0c;但是其实都需要大量的时间精力。 前两年也准备过一份《30天入门人工智能》的视频课程&#xff0c;总共31…

Ansible自动化部署工具|各个模块的使用

Ansible自动化部署工具|各个模块的使用 一、自动化运维工具—Ansible二、安装Ansible查询webserver组中主机的日期 三 Ansible常用模块(1) ansible命令行模块(2) command模块(3) shell模块(4) cron模块(5) user模块(6) grup模块(7) copy模块(8) file模块(9) ping模块(10) servi…

内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络

并非为了教学&#xff0c;仅供自己记录&#xff0c;方便下次用。所以内容不会刻意花时间写的很细节详细。 1. 服务器NPS配置 NPS install安装后&#xff0c;配置文件会在其他位置&#xff0c;通过是 /etc/nps/nps.conf目录。 找到进行修改&#xff0c;主要修改的是http_proxy_p…

【flask】三种路由和各自的比较配置文件所有的字母必须大写if __name__的作用核心对象循环引用的几种解决方式--难Flask的经典错误

三种路由 方法1&#xff1a;装饰器 python C#, java 都可以用这种方式 from flask import Flask app Flask(__name__)app.route(/hello) def hello():return Hello world!app.run(debugTrue)方法2: 注册路由 php python from flask import Flask app Flask(__name__)//app…

【以太坊 Solidity】管理员读写权限/访问控制/角色控制

摘要 在 Solidity 语言的多继承中&#xff0c;若多个合约共同继承一个父合约&#xff0c;则这多个合约 共享 父合约中的变量和函数。 1.测试的智能合约 合约继承路线如下&#xff1a; #mermaid-svg-DtimeTjOch5CJh50 {font-family:"trebuchet ms",verdana,arial,s…

应用,auto,内联函数

6.引用&#xff1a; //指针 int main() {int a 0;int& b a;int& c b;int& d c;cout << &a << endl;cout << &b << endl;cout << &c << endl;cout << &d << endl;b;d;cout << a <<…

WEB攻防通用漏洞跨域CORS资源JSONP回调域名接管劫持

目录 一、同源策略&#xff08;SOC&#xff09; 二、跨域资源&#xff08;COSP&#xff09; 三、回调跨域&#xff08;JSOP&#xff09; 四、CORS资源跨域-敏感页面原码获取 五、JSONP 回调跨域-某牙个人信息泄露 六、子域名劫持接管 一、同源策略&#xff08;SOC&#x…

C#手麻系统源码, 基于前端Winform+后端WCF +sqlserver 开发

手麻系统源码&#xff0c;自动生成电子单据 基于C# 前端框架&#xff1a;Winform后端框架&#xff1a;WCF 数据库&#xff1a;sqlserver 开发的手术室麻醉临床信息系统源码&#xff0c;应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人…

Buffer Pool介绍

Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率 Buffer Pool由 缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制块中存储着对应缓存页的所属的 表空…

English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三

English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三 主题整体听一遍精听句子 1扩展 way of doing | way to do sth 句子 2扩展 Expression扩展 base 句子 3句子 4扩展 red-hot 句子 5句子 6扩展 fiery 句子 7句子 8句子 9句子 10句子 11扩展 born 句子 12句子 13句子…

Haar特征和级联分类器目标检测介绍及应用

文章目录 Haar特征和级联分类器目标检测介绍及应用1. Haar特征2. 级联分类器3. 实现步骤4.尝试训练自己的级联分类器4. 应用示例 Haar特征和级联分类器目标检测介绍及应用 Haar特征和级联分类器是一种经典的目标检测算法&#xff0c;适用于检测物体在图像中的位置、大小和姿态…

卷积神经网络算法解读

神经网络算法解读 机器学习流程&#xff1a; 数据获取特征工程建立模型评估与应用 图像数据是一个矩阵300 * 100 * 3 线性函数分类方法&#xff1a;分类&#xff08;wxb线性回归&#xff09; 损失函数&#xff1a;预测值与实际值之间的差异值 softmax分类器&#xff1a; 神…

(Python)Jupyter Notebook无法运行代码,且提示error和自动保存失败时如何操作?无法链接内核?

目录 一、报错情形 1、运行代码时跳转下一行&#xff0c;无法执行代码。 2、在修改文件名是提示失败&#xff0c;出现“error”字样。 二、深层原因 三、解决方案 四.建议使用原环境 Anaconda的Jupyter Notebook作为优秀的网页编辑器&#xff0c;非常适用于编写Python程序…

ubuntu16.04升级到20.04后报错 By not providing “FindEigen.cmake“

编译问题&#xff1a; CMake Error at modules/perception/lidar/CMakeLists.txt:14 (find_package): By not providing "FindEigen.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen&…

黑马Redis入门到实战(基础篇)

Redis基础篇 Redis的类型和常见命令以及客户端使用 目录 1 .初识Redis 1 .1 .认识NoSQL 1 .1 .1 .结构化与非结构化 1 .1 .2 .关联和非关联 1 .1 .3 .查询方式 1 .1 .4 .事务 1 .1 .5 .总结 1 .2 .认识Redis 1 .3 .安装Redis 1 .3 .1 .依赖库 1 .3 .2 .上传安装包并解压 1 .3 .…