实验二 图像的代数运算

一、实验目的:

1.了解图像的算术运算在数字图像处理中的初步应用。

2.体会图像算术运算处理的过程和处理前后图像的变化。

二、实验内容:

1.图像的加法运算

图像相加一般用于对同一场景的多幅图像求平均效果,以便有drrrrrr效地降低具有叠加性质的随机噪声。直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通讯方式传送的图像(如卫星图像),这种处理是必不可少的。

在MATLAB中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。imadd函数的调用格式如下:

Z = imadd(X,Y)

其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。

图像加法在图像处理中应用非常广泛。例如,以下代码使用加法操作将图2.1中的(a)、(b)两幅图像叠加在一起:

I = imread(‘flower.tif’);J = imread(‘rice.tif’);K = imadd(I,J);imshow(K);

叠加结果如图2.2所示。

   

2.1 待叠加的两幅图像          

2.2 叠加后的图像效果

给图像的每一个像素加上一个常数可以使图像的亮度增加。例如,以下代码将增加图2.3(a)所示的RGB图像的亮度,加亮后的结果如图2.3(b)所示。

RGB = imread(‘flower.tif’);RGB2 = imadd(RGB,50);subplot(1,2,1);imshow(RGB);subplot(1,2,2);imshow(RGB2);RGB=imread('flower.tif');RGB2=imadd(RGB,-50);subplot(1,2,1);imshow(RGB);subplot(1,2,2);imshow(RGB2);%亮度变暗  

       

                                加50                                                                减50

2.3 亮度增加与变暗

两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值,尤其对于uint8类型的图像,溢出情况最为常见。当数据值发生溢出时,imadd函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和。为了避免出现饱和现象,在进行加法计算前最好将图像转换为一种数据范围较宽的数据类型。例如,在加法操作前将uint8图像转换为uint16类型。

2.图像的减法运算

图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理工作的准备步骤。例如,可以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。在利用图像减法处理图像时往往需要考虑背景的更新机制,尽量补偿由于天气、光照等因素对图像显示效果造成的影响。

在MATLAB中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。imsubtract函数的调用格式如下:

Z = imsubtract(X,Y);

其中,Z是X-Y操作的结果。以下代码首先根据原始图像(如图2.4(a)所示)生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成图2.4(b)所示的图像:

I = imread(‘cameraman.tif’);background = imopen(cameraman, strel(‘disk’,15));I2 = imsubtract(rice, background);subplot(1,2,1);imshow(I);subplot(1,2,2);imshow(I2);

     

2.4 原始图像、减去背景图像

如果希望从图像数据I的每一个像素减去一个常数,可以将上述调用格式中的Y替换为一个指定的常数值,例如:

Z = imsubtract(I,50);

减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0。为了避免差值产生负值,同时避免像素值运算结果之间产生差异,可以调用函数imabsdiff。imabsdiff将计算两幅图像相应像素差值的绝对值,因而返回结果不会产生负数。该函数的调用格式与imsubtract函数类似。

3. 图像的乘法运算

两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因子大于1,那么将增强图像的亮度,如果因子小于1则会使图像变暗。缩放通常将产生比简单添加像素偏移量自然得多的明暗效果,这是因为这种操作能够更好地维持图像的相关对比度。此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也被作为一种技巧来实现卷积或相关处理。

在MATLAB中,使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值。immulitply函数的调用格式如下:

Z = immulitply(X,Y)

其中,Z=X*Y。例如,以下代码将使用给定的缩放因子对图2.5(a)所示的图像进行缩放,从而得到如图2.5(b)所示的较为明亮的图像:

I = imread(‘room.tif’);J = immultiply(I,1.2);subplot(1,2,1);imshow(I);subplot(1,2,2);imshow(J);

 

2.5 原图和乘以因子1.5 的图像

uint8图像的乘法操作一般都会发生溢出现象。Immultiply函数将溢出的数据截取为数据类型的最大值。为了避免产生溢出现象,可以在执行乘法操作之前将uint8图像转换为一种数据范围较大的图像类型,例如uint16。

4.图像的除法运算

除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换。

在MATLAB中使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。imdivide函数的调用格式如下:

Z = imdivide(X,Y)

其中,Z=X/Y。例如,以下代码将图4所示的两幅图像进行除法运算,请将这个结果和减法操作的结果相比较,对比它们之间的不同之处:

I1= imread(‘cameraman.tif’);I = double(I1);J= I * 0.43 + 90;I2 = uint8(J);Ip = imdivide(I, I2);Imshow(Ip, []);

除法操作的结果如图2.6所示。

2.6 原图和减背景后的图像相除的图像效果

5.图像的四则代数运算

可以综合使用多种图像代数运算函数来完成一系列的操作。例如,使用以下语句计算两幅图像的平均值:

I = imread(‘rice.tif’);I2 = imread(‘.tif’);K = imdivide(imadd(I,I2),2);

建议最好不要用这种方式进行图像操作,这是因为,对于uint8或uint16数据,每一个算术函数在将其输出结果传递给下一项操作之前都要进行数据截取,这个截取过程将会大大减少输出图像的信息量。执行图像四则运算操作较好的一个办法就是使用函数imlincomb。函数imlincomb按照双精度执行所有代数运算操作,而且仅对最好的输出结果进行截取,该函数的调用格式如下:

Z = imlincomb(A,X,B,Y,C);

其中,Z=A*X+B*Y+C。MATLAB会自动根据输入参数的个数判断需要进行的运算。例如,以下语句将计算Z=A*X+C:

Z = imlincomb(A,X,C)

而以下语句将计算Z=A*X+B*Y:

Z = imlincomb(A,X,B,Y,)

三、实验程序、实验结果与实验分析:

1.实验程序

(1)图像的加法运算 (脚本test2_1)

I = imread('flower.tif');whos II = I(:,:,1:3); whos IJ = imread('rice.tif');whos JK = imadd(I,J);imshow(K);title('叠加后的图像');figure;RGB = imread('flower2.tif');RGB2 = imadd(RGB,50);subplot(1,2,1);imshow(RGB);title('原始图像');subplot(1,2,2);imshow(RGB2);title('增加50亮度后的图像');figure;RGB=imread('flower2.tif');RGB2=imadd(RGB,-50);subplot(1,2,1);imshow(RGB);title('原始图像');subplot(1,2,2);imshow(RGB2);%亮度变暗 title('减少50亮度后的图像');

(2)图像的减法运算 (脚本test2_2)

I = imread('cameraman.tif');background = imopen(I, strel('disk',15));I2 = imsubtract(I, background);subplot(1,2,1);imshow(I);title("原始图像")subplot(1,2,2);imshow(I2);title("减去背景图像")

(3)图像的乘法运算 (脚本test2_3)

I = imread('room.tif');J = immultiply(I,1.2);subplot(1,2,1);imshow(I);title('原始图像');subplot(1,2,2);imshow(J);title('乘以因子1.5 的图像');

(4)图像的除法运算 (脚本test2_4)

I1 = imread('cameraman.tif');I = double(I1);J = I * 0.43 + 90;I2 = J; % 将 I2 保持为双精度类型Ip = imdivide(I, I2);subplot(1, 3, 1);imshow(I1);title('原始图像');subplot(1, 3, 2);imshow(Ip, []);title('减背景后的图像相除的图像');subplot(1, 3, 3);imshow(I2, []);title('减背景后的图像');

(5)图像的四则代数运算 (脚本test2_5)

I = imread('rice.tif');whos IJ = imread('room.tif');whos JI1 = double(I);J1= double(J);K = imlincomb(1.1, I1, 0.9, J1, 50, 'uint16');whos KK = uint8(K);subplot(1, 3, 1);imshow(I, []);title('图像 I');subplot(1, 3, 2);imshow(J, []);title('图像 J');subplot(1, 3, 3);imshow(K, []);title('I和J线性组合后的图像');

2.实验结果

(1)图像的加法运算

①两张图像叠加

②增加常数变亮

 

③变暗后的图像

 

(2)图像的减法运算

(3)图像的乘法运算

(4)图像的除法运算

(5)图像的四则代数运算

3.实验分析

(1)图像的加法运算

①首先加载名为flower.tifrice.tif的图像,分别存储在变量I和J中。
I = imread('flower.tif');J = imread('rice.tif');
②然后将I 转换为只有三个通道的彩色图像,使两幅图像大小和类型保持一致,否则无法叠加。
I = I(:,:,1:3); 
③最后使用 imadd 函数将图像 I 和图像 J 进行叠加,结果存储在变量 K 中。
K = imadd(I,J);

①首先使用imread函数加载名为 flower2.tif的彩色图像,存储在变量 RGB 中。

RGB = imread('flower2.tif');
②然后使用imadd函数增加50 RGB 图像的亮度
RGB2 = imadd(RGB,50);

①首先使用imread函数加载名为 flower2.tif的彩色图像,存储在变量 RGB 中。

RGB=imread('flower2.tif');
②然后使用imadd函数减少50 RGB 图像的亮度
RGB2=imadd(RGB,-50);

(2)图像的减法运算

①首先加载名为cameraman.tif的图像
I = imread('cameraman.tif');
②通过 imopen(I, strel('disk',15)) 函数创建了一个结构元素,然后使用 imopen 函数对原始图像 I 进行了开运算操作,以获得背景信息。
background = imopen(I, strel('disk',15));
③使用 imsubtract 函数对原始图像 I 和背景图像进行减法运算,得到了减去背景后的图像 I2
I2 = imsubtract(I, background);

(3)图像的乘法运算

①首先使用imread函数加载图像
I = imread('room.tif');
②使用 immultiply(I,1.5) 对原始图像 I 中的每个像素值乘以因子 1.5
I = imread('room.tif');

注:因子大于 1 时,图像的亮度会增加;因子小于 1 时,图像的亮度会减小。

(4)图像的除法运算

①首先使用imread函数加载图像
I1 = imread('cameraman.tif');
②将原始图像 I1 转换为 double 类型,并进行了一系列线性变换,其中包括乘以一个因子并加上一个偏置值,得到图像 J。
I = double(I1);J = I * 0.43 + 90;I2 = J; % 将 I2 保持为双精度类型
③使用 imdivide 函数对原始图像 I 和减去背景后的图像 I2 进行相除操作,得到了相除后的图像 Ip。
Ip = imdivide(I, I2);

(5)图像的四则代数运算

①首先使用imread函数加载图像rice.tif和room.tif
I = imread('rice.tif');J = imread('room.tif');
②将它们转换为 double 类型以进行线性组合
I1 = double(I);J1= double(J);
③使用imlincomb函数对图像I和J进行线性组合,权重分别为1.1和0.9,加上偏置值50,结果存储在变量K中。这个操作可以将两幅图像按照给定的权重进行加权组合,从而生成一幅新的图像。使用了uint16类型作为输出图像的数据类型。
K = imlincomb(1.1, I1, 0.9, J1, 50, 'uint16');

四、思考题

1.由图像算术运算的运算结果,思考图像减法运算在什么场合上发挥优势?

答:(1)背景去除:在一些情况下,图像中的背景可能对目标的检测和分析产生干扰。通过对包含目标和背景的两幅图像进行减法运算,可以将背景从图像中去除,突出目标的特征和边缘。

(2)运动检测:在视频监控和运动分析中,图像减法可以用于检测图像序列中的运动物体。通过对连续帧之间进行减法运算,可以获得移动物体的差异图像,从而实现运动检测和跟踪。

(3)亮度调整:图像减法运算可以用于对图像的亮度进行调整。通过将图像中的每个像素值减去一个常数值,可以增加或减少图像的亮度水平,使图像更加清晰或更加柔和。

(4)图像增强:在一些情况下,图像中的某些部分可能受到噪声、光照变化或其他因素的影响,从而降低了图像的质量。通过对原始图像和经过滤波处理后的图像进行减法运算,可以增强图像中的目标特征,提高图像的质量和清晰度。

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

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

相关文章

Qt实现检测软件是否多开

Qt实现检测软件是否多开 在桌面软件开发中,软件通常要设置只允许存在一个进程,像一些熟知的音乐软件,QQ音乐这种。而这些软件在限制只有一个进程的同时,通常还会有双击桌面图标唤醒已运行的后台进程的功能。关于双击桌面唤醒已运…

【server】3、注册中心与配置中心

1、服务注册与发现 1.1、consul 1.1.1 是什么 官网: Consul by HashiCorp spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul gitHub 官网 :GitHub - hashicorp/consul: Consul is a distributed, highly available, and data cent…

Wayfair EDI项目案例

Wayfair是一家成立于2002年的美国电子商务公司,专注于家居用品的销售。其总部位于马萨诸塞州波士顿。Wayfair提供广泛的产品种类,包括家具、装饰品、家居用品和室外用品等。通过其网站和移动应用程序,顾客可以方便地浏览和购买所需的家居产品…

2024最新中级会计职称考试全科题库资料。

1.根据消费税法律制度的规定,下列各项中,属于消费税征税范围的是()。 A.汽车轮胎 B.食用酒精 C.铂金首饰 D.体育上用的发令纸 答案:C 解析:选项ABD均不属于消费税的征税范围。 2.甲企业(…

抬头显示器HUD原理及特性

HUD基本原理 抬头数字显示仪(Head Up Display),又叫平视显示系统,它的作用,就是把时速、导 航等重要的行车信息,投影到驾驶员前风挡玻璃上,让驾驶员尽量做到不低头、不转头 就能看行车信息。 HUD成像为离轴三反的过程&…

MATLAB——循环语句

一、for end语句 在该语法中,循环变量是用于迭代的变量名,它会在每次循环迭代中从向量或矩阵中取出一列的值。数值向量或者矩阵则表示了循环变量可以取值的范围,通常根据实际需要事先给定。一旦循环变量遍历完数值向量或者矩阵中的所有值&…

【配置网络和使用ssh服务】

文章目录 一、配置文件二、配置网络1.使用系统菜单配置网络2.通过网卡配置文件配置网络3.使用图形界面配置网络4.使用nmcli命令配置网络 三、配置远程控制服务1.配置sshd服务2.安全密钥验证3.远程传输命令 一、配置文件 跟网络有关的主要配置文件如下: /etc/host.c…

failed to lazily initialize a collection of role,解决Hibernate查询报错

Hibernate报错: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jiuqi.gov.common.attatchment.entity.AttachmentEntity.properties, could not initialize proxy - no Session at org.hibernate.co…

20240705 每日AI必读资讯

📚Retool 刚刚发布了最新2024上半年《人工智能现状报告》 - 收集了约750名技术人员的意见 - 包括开发者、数据团队和各行业的领导者,了解如何利用人工智能产生真正的影响。 🔗 2024上半年《人工智能现状报告》Retool刚刚发布了最新-CSDN b…

【DataSophon】DataSophon1.2.1服务组件开启 kerberos

目录 一、DataSophon是什么 1.1 DataSophon概述 1.2 架构概览 1.3 设计思想 二、集成组件 三、环境准备 四、安装kerberos服务 4.1 Zookeeper 4.2 HDFS 4.3 HBase 4.4 YARN 4.5 hive 【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程-CSDN博客 【Da…

初探前端世界:网页基本结构入门指南

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和<CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f451;认识前端和网页&#x1f353;1 什么是网页&#x1f353;2 …

部署redis集群哨兵模式

部署redis集群哨兵模式 前言主要功能工作机制 一、虚拟机部署1、安装2、改配置1、redis.conf2、sentinel.conf3、起服务4、停redis-server服务&#xff0c;验证sentinel 3、脚本1. sentinel notification-script2. sentinel reconfig-script3. sentinel client-reconfig-script…

3个让你爽到爆炸的学习工具

We OCR WeOCR 是一个基于浏览器的文字识别工具&#xff0c;用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序&#xff08;PWA&#xff09;&#xff0c;可以在浏览器中离线使用。WeOCR 是开源的&#xff0c;并且基于 Tesseract OCR 引擎开发。用户无需在本…

软件研发标准化流程文件

为了规范化系统开发流程&#xff0c;我们精心制定了一套详尽的规范文档。该文档旨在通过标准化、系统化的方法来显著提升开发效率与项目质量。流程始于明确需求阶段&#xff0c;通过深入细致的设计规划来确保解决方案既可行又具有前瞻性。随后&#xff0c;我们进入高效的编码实…

INFINI Console 使用介绍

上次在《INFINI Easysearch尝鲜Hands on》中我们部署了两个节点的Easysearch&#xff0c;并且也设置了Console对集群进行监控。那么今天我们再来介绍下INFINI Console的使用。 INFINI Console 仪表盘功能介绍 INFINI Console 是一个功能强大的数据管理和分析平台&#xff0c;…

图像练习-识别中圆形锡点 (04)

图片 代码 cv::Mat src cv::imread("light_point.png", cv::IMREAD_COLOR);cv::Mat draw src.clone();cv::Rect rt0(20, 80, src.cols - 30, 190);cv::Rect rt1(20, 480, src.cols - 30, 190);cv::Mat gray;cv::cvtColor(src, gray, cv::COLOR_BGR2GRAY);cv::Mat …

AGI系列(7)Reflection 在 AI agent 中的应用实例

斯坦福大学教授吴恩达一直非常推崇AI Agent,之前他提出过AI Agent的四种工作模式,分别是Reflection(反思)、Tool use(工具使用)、Planning(规划)和Multi-agent collaboration(多智能体协同)。 近日,他又开源了一个翻译 AI Agent, 他认为 AI 智能体机器翻译对改进传…

java项目自定义打印日志,打印请求方式,参数用时等

1.相关依赖 <!-- 私人工具包 --><dependency><groupId>cn.changeforyou</groupId><artifactId>location</artifactId><version>1.13-SNAPSHOT</version></dependency><!-- hutool工具依赖 --><dependency>…

【深入理解】元组tuple的底层实现(与C++进行对比)

Python虽然没有指针类型&#xff0c;但是处处离不开指针&#xff0c;我们要认识到一点&#xff0c;只要操作系统是用C语言写的&#xff0c;就一定会使用到指针&#xff0c;因为使用某种语言&#xff0c;我们一定会定义变量&#xff0c;就必须申请进程的地址空间&#xff0c;也就…

内容评分越高,谷歌排名就越靠前吗?

我研究并分析了目前流行的四个内容优化工具的内容评分和Google排名之间的关联性&#xff1a;Clearscope、 Surfer、 MarketMuse 和 Frase&#xff0c;结果显示关联性普遍不高。 虽然相关性并不一定意味着绝对的因果关系&#xff0c;但也表明&#xff0c;一味的追求内容得分并不…