数字图像处理 实验三 数字图像的几何运算

一、实验目的

掌握图像的基本几何变换的方法

        1. 图像的平移 

        2. 图像的旋转

二、实验环境

        1. PC计算机

        2. MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox)

        3. 实验所需要的图片

三、实验原理

提示:图片平移就是实现运算

四、实验图像

           

图片名称:                       kugou.jpeg                                       QQ.jpeg

图片尺寸:                       512*512*3                                      512*512*3 

五、实验步骤和结果

练习用matalb命令实现图像的缩放、旋转和平移操作

1. 读入图像并显示。

A = imread('kugou.jpeg');  
imshow(A);B = imread("QQ.jpeg");  
imshow(B);

2. 将图像放大1.5倍,插值方法使用三种不同方法,显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;选用其它图像,重复实验。

A1 = imresize(A, 1.5, 'nearest');  
imshow(A1);B1 = imresize(B, 1.5, 'nearest');  
imshow(B1);

A2 = imresize(A, 1.5, 'bilinear');  
imshow(A2);B2 = imresize(B, 1.5, 'bilinear');  
imshow(B2);

A3 = imresize(A, 1.5, 'bicubic');  
imshow(A3);B3 = imresize(B, 1.5, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

3. 图像缩小0.8、0.5倍,插值方法使用三种不同方法,显示并比较结果有什么差异。

提示:用imresize函数,imresize函数的语法格式为:B = imresize(A, m, method)

这里参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear' (双线性插值),'bicubic'(双三次插值),默认为'nearest'。

A1 = imresize(A, 0.8, 'nearest');  
imshow(A1);
B1 = imresize(B, 0.8, 'nearest');  
imshow(B1);A2 = imresize(A, 0.8, 'bilinear');  
imshow(A2);
B2 = imresize(B, 0.8, 'bilinear');  
imshow(B2);A3 = imresize(A, 0.8, 'bicubic');  
imshow(A3);
B3 = imresize(B, 0.8, 'bicubic');  
imshow(B3);

A1 = imresize(A, 0.5, 'nearest');  
imshow(A1);
B1 = imresize(B, 0.5, 'nearest');  
imshow(B1);A2 = imresize(A, 0.5, 'bilinear');  
imshow(A2);
B2 = imresize(B, 0.5, 'bilinear');  
imshow(B2);A3 = imresize(A, 0.5, 'bicubic');  
imshow(A3);
B3 = imresize(B, 0.5, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

4. 图像分别顺时针旋转30度、45度,插值方法使用三种不同方法,显示旋转后的图像并比较结果有什么不同。

提示:用imrotate函数,imrotate的语法格式为:B = imrotate(A, angle, method)

函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。

A1 = imrotate(A, 30, 'nearest');  
imshow(A1);
B1 = imrotate(B, 30, 'nearest');  
imshow(B1);A2 = imrotate(A, 30, 'bilinea');  
imshow(A2);
B2 = imrotate(B, 30, 'bilinea');  
imshow(B2);A3 = imrotate(A, 30, 'bicubic');  
imshow(A3);
B3 = imrotate(B, 30, 'bicubic');  
imshow(B3);

A1 = imrotate(A, 45, 'nearest');  
imshow(A1);
B1 = imrotate(B, 45, 'nearest');  
imshow(B1);A2 = imrotate(A, 45, 'bilinea');  
imshow(A2);
B2 = imrotate(B, 45, 'bilinea');  
imshow(B2);A3 = imrotate(A, 45, 'bicubic');  
imshow(A3);
B3 = imrotate(B, 45, 'bicubic');  
imshow(B3);

最近邻域内插计算量较小,但可能会造成插值生成的图像灰度上的不连续,在灰度变化的地方可能出现明显的锯齿状。

双线性内插法的计算比最邻近点法复杂,计算量较大,但没有灰度不连续的缺点,结果基本令人满意。它具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊。

双三次内插方法计算量较大,但插值后的图像效果最好。

5. 编写实现图像平移的函数。

% 编写实现图像平移的函数hmove,平移量为x0,y0,平移前图像矩阵为i
function [I]=hmove(i,x0,y0); 
[r,c]=size(i);               
I(r+x0,c+y0)=0;            % 平移后图像矩阵为I
for x=1:r;for y=1:c;x1=x+x0;y1=y+y0;I(x1,y1)=i(x,y);end;
end;

6. 调用平移函数,将灰度图平移100行20列,在同一个窗口中显示平移前和平移后的图像。

函数调用示例:I1=hmove(gray1,100,20);

I = im2double(A);  
I1=hmove(I, 100, 20);  
imshow(I1);

I = im2double(B);  
I1=hmove(I, 100, 20);  
imshow(I1);

六、实验思考

通过本次实验,初步掌握了图像的平移、旋转等图像的基本几何变换的方法。

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

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

相关文章

11.20[JAVAEXP3]重定向细究【DEBUG】

设置了根域名访问为testServlet,让他重定向到首页为test.jsp,事实上也都触发了,但是最后显示的为什么不是test.jsp生成页面,依然还是index.jsp生成的页面?? 重定向是通过Dispatcher进行的,而不是sendRedir…

金融数学在股市交易中的具体应用

### 1. 风险管理 - **VaR(在险价值)**: VaR是衡量投资组合潜在损失的指标。例如,如果一个投资组合的VaR为100万元,置信水平为95%,这意味着在未来的一个交易日内,有95%的可能性该投资组合的损失不会超过100…

c#中context.SaveChanges()方法

跟踪实体的状态: Entity Framework 使用 Change Tracker 来跟踪上下文中所有实体的状态。实体的状态可以是: Added:新添加的实体(即将插入到数据库中)。Modified:已修改的实体(即将更新数据库中…

大端存储和小端存储究竟是什么

数据存储方式 数据在计算机中表现为是0101的二进制形式,cpu在读取数据的时候需要从低地址向高地址读取 注意: 永远都是从低地址开始读取数据 低地址和高地址 内存地址空间: 计算机的内存被划分为一个连续的地址空间,这个空间从0开始,一直…

ORACLE之DBA常用数据库查询

数据库信息 数据库概要select a.name "DB Name", e.global_name "Global Name", c.host_name "Host Name", c.instance_name "Instance Name" , DECODE(c.logins,RESTRICTED,YES,NO) "Restricted Mo…

8. Debian系统中显示屏免密码自动登录

本文介绍如何在Debian系统上,启动后,自动免密登录,不卡在登录界面。 1. 修改lightDM配置文件 嵌入式Debian系统采用lightDM显示管理器,所以,一般需要修改它的配置文件/etc/lightdm/lightdm.conf,找到[Seat…

docker 架构详解

Docker架构是基于客户端-服务器(C/S)模式的,包含多个关键组件,以确保容器化应用的高效构建、管理和运行。以下是对Docker架构的详细解析: Docker 架构概述 Docker 架构采用客户端-服务器(C/S)…

三菱伺服JET产品线(选型说明)

伺服放大器功能提升 伺服放大器MELSERVO-JET系列为进一步优化了独家控制引擎的高性能伺服放大器。 可通过与支持CC-LinK IE TSN的运动控制器的同步通信,进行高 速、高精度的运动控制。 除了旋转型伺服电机以外,还支持线性伺服电机。MR-JET-G-N1支持EtherCAT。 旋转型伺服电机 …

【sqlserver】mssql 批量加载数据文件 bulk copy使用

参考文章: Using bulk copy with the JDBC driver SqlServer数据批量写入 SqlServer批量插入数据方法–SqlBulkCopy sqlserver buld copy需要提供,数据文件的对应表的元数据信息主要的字段的位置、字段的名称、字段的数据类型。 执行bulk load时候不一…

关于Chrome自动同步书签的解决办法

前言 并不一定适用所有用户, 目前我在网上搜集了一些资料,也做了一些尝试。 就我个人总结的经验来讲,分享大家以下几种办法: 1.书签同步插件 点击如下🔗: Chrome书签同步https://bm.famend.cn/ …

如何选择一款合适的网络变压器

选择合适的网络变压器需要考虑以下几个关键因素: 1. 传输速率:首先,您需要确定所需的传输速率,这通常取决于您的网络应用和设备。例如,如果您正在使用或计划使用10Mbps、100Mbps、1Gbps、10Gbps等不同速率的网络设备&…

基于elementui的远程搜索下拉选择分页组件

在开发一个练手项目的时候&#xff0c;需要一个远程搜索的下拉选择组件&#xff1b; elementui自带的el-select支持远程搜索&#xff1b;但如果一次性查询的数据过多&#xff1b;会导致卡顿。故自己实现一个可分页的远程下拉选择组件 效果&#xff1a; 代码&#xff1a; <…

告别充电焦虑:移动充电机器人的革命性解决方案

移动充电机器人作为新能源汽车领域的黑科技&#xff0c;正逐渐崭露头角。它的出现为电动汽车充电带来了全新的解决方案&#xff0c;解决了传统充电方式的诸多痛点。 新能源汽车具有诸多优点&#xff0c;如科技含量高、噪音小、使用成本低等&#xff0c;但 “续航焦虑”“充电焦…

Socket 编程预备

目录 理解源 IP 地址和目的 IP 地址 认识端口号 端口号范围划分 理解 "端口号" 和 "进程 ID" 理解源端口号和目的端口号 理解 socket 传输层的典型代表 认识 TCP 协议 认识 UDP 协议 网络字节序 socket 编程接口 socket 常见 API sock…

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…

实例教程:BBDB为AHRS算法开发提供完善的支撑环境(下)

4. BBDB基础上为算法实现提供支撑方式二&#xff1a;算法层实现 第2节内容当中讲述在应用层实现AHRS的步骤&#xff0c;这种方法优点在于实现方法比较简单明了。但是缺点在于程序代码的组织算不上很好&#xff0c;AHRS算法代码与PH47框架代码间存在一定的耦合度&#xff0c;会…

数字证书实现oauth2.0与token去中心化的解耦

鉴权服务oauth2.0的既要还要的痛点 鉴权服务手撸&#xff1f;不可能&#xff0c;上spring security&#xff01; 感觉还不够&#xff1f;再叠加oauth2.0&#xff01; 鉴权太重&#xff1f;换用分布式token&#xff01; 既然分布式了&#xff0c;是不是可以不用鉴权中心&#xf…

鸿蒙Next学习-监听指定页面显示/页面生命周期

自定义组件监听页面生命周期 使用无感监听页面路由的能力&#xff0c;能够实现在自定义组件中监听页面的生命周期。 // Index.ets import { uiObserver, router, UIObserver } from kit.ArkUI;Entry Component struct Index {listener: (info: uiObserver.RouterPageInfo) &g…

wordpress收录好好的换了个模板就突然不收录了

wordpress收录好好的换了个模板就突然不收录了&#xff0c;而且原来收录的也给删除了&#xff0c;是模板的问题吗? 一般来说&#xff0c;不是模板的问题&#xff0c;是突然换模板&#xff0c;或添加大量内容、导致数据结构等方面变化&#xff0c;被搜索引擎当作弊的处罚了。要…

solon 集成 kafka-clients

使用 kafka-clients 原本是比较简单的事情。但有些同学习惯了 spring-kafka 后&#xff0c;对原始 java 接口会陌生些。会希望有个集成的示例。 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><ve…