视觉信息处理和FPGA实现第5次作业-Matlab实现图像逆时针旋转90度

一、Matlab2022a安装

链接:https://pan.quark.cn/s/6e177bc7c11d
提取码:dKNN

二、Matlab使用

2.1 新建一个脚本文件(.m文件)

2.2 另存为到便于归档的地方

考虑到.m文件如果不是全英文路径,也有可能会出问题,所以建议路径全英文。

2.3 运行disp("Hello, World")

disp全称应该是display,将字符串显示在命令行。

除了字符串数组和字符串内插,单引号和双引号没有区别,直接全部用双引号就行,因为双引号有上面两项功能。

写下需要的代码之后,点击运行,弹出了窗口,点击添加到路径即可。

命令行的>>test意思是执行脚本test,下面的Hello, World是输出结果。

三、解读顺时针旋转90度的代码

3.1 clc命令

清楚命令行窗口的值,看起来更舒服。全称应该是clear screen。

3.2 clear all

clear all; 用于清除当前工作空间中的所有变量,即删除所有已经定义的变量,以便开始一个新的工作。这有助于确保不同部分之间的代码不会相互干扰, 并且可以释放内存。

3.3 注释

%在matlab中,%用来注释一行
%{   用来注释一段
%}

3.4 寻找Matlab示例图像,imread读入图像,imshow输出图像

我的在这个路径下,D:\matlab_2022a\toolbox\images\imdata,D:\matlab_2022a是我的Matlab安装目录。

imread函数的返回值,它返回的是一个数组,表示读取的图像数据。具体来说,如果图像是灰度图像,返回的数组是一个二维矩阵,每个元素表示一个像素的灰度值;如果图像是彩色图像,返回的数组是一个三维矩阵,其中的每个元素是一个包含红、绿、蓝(RGB)通道值的向量。

3.4.1 Matlab的相对路径和绝对路径

我在大四的时候跑Matlab,常年受到相对路径和绝对路径的困扰,正好一起总结了。

绝对路径

在windows中,路径从盘符开始,路径的分隔符是一个反斜杠\(backslash),如果有过IT运维工程师经验的小伙伴回想起来刚刚入行的时候输入本地管理员账号老是输入不对,.\administrator是正确的,./administrator是错误的。

如图所示,那个cameraman.tif的图像的绝对路径是

D:\matlab_2022a\toolbox\images\imdata\cameraman.tif

在Matlab中使用imread和imshow读和输出图像

pic= imread("D:\matlab_2022a\toolbox\images\imdata\cameraman.tif");
imshow(pic);

效果如下

相对路径

Matlab的相对路径就比较麻烦,分成两种情况。

第一种情况是针对“当前文件夹的”,如图所示

可以直接cv大法把文件复制进来,能正常使用

第二种情况是针对.m文件所在路径的

我把cameraman.tif这张图片复制到了.m文件的相同目录下

如果我们不加.\,直接在读取图片的函数imread 里面输入cameraman.tif,图片是能够被读取到的

但是如果加了.\,就会报错,显示找不到图片

pwd之后显示当前路径在第一种情况的“当前文件夹”下,肯定也就没有“摄影男人”这张图片了。

第三种情况,.m目录有无图片,“当前文件夹”有图片,能正常使用

第四种情况,.m目录和“当前文件夹”都有同名文件

我对.m目录下的图片进行了编辑,如图所示,以作区别。

结果如图所示,很明显,无论是只输入文件名还是.\的情况下,都已当前目录为准。

这个实验补充一个对照,能看到这里的人应该明白我做了什么。

总结

“当前文件夹”的优先级远大于“.m文件目录”,一切以“当前文件夹”为准,可以将当前文件夹移动到和.m文件相同目录。

3.5 [M,N]= size( pic(:,:,1));通过索引获得行数和列数

在 MATLAB 中,图像是以多维矩阵的形式表示的,其中的维度通常是行、列和通道。对于彩色图像,通常有三个通道,分别对应红色(R)、绿色(G)和蓝色(B)。

当你使用 pic(:,:,1) 时,:,:,1 表示从图像 pic 中选择所有的行和列,但只选择第一个通道(即红色通道)。这是因为在 MATLAB 中,通道的索引从1开始,所以 1 代表红色通道。

如果你需要获取其他通道的像素值,你可以分别使用 2 表示绿色通道,3 表示蓝色通道。

1,2,3是索引,索引从1开始。

红色通道的行和列表示了红色通道中每个像素的位置。每个行列有自己的灰度值,用来表示图像。

3.6 旋转部分代码解析

旋转的数学原理

推导过程

注意!!!

1、在Matlab中,旋转的起点是左上角,也就是矩阵的第一行的第一列

2、不管旋转的旋转中心在哪里,都不会影响到图像旋转出来的效果,如图,反正Matlab打印出来的时候都会调整放在中间位置。

%第M行
for i= 1:M%第N列for j= 1:N%{原图* * ** * ** * ** * *旋转后* * * ** * * ** * * *%}%假设图像有4行M=4,3列N=3%举个例子,红色通道的第1行i=1,第1列j=1%是旋转后图像,通道1,第1行,第4+1-1=4列pic1(j,M+1-i,1) = red_channel(i,j);pic1(j,M+1-i,2) = green_channel(i,j);pic1(j,M+1-i,3) = blue_channel(i,j);end
end

3.7 生成图片的函数figure,subplot

figure();subplot(121);
imshow(pic);
title("原图");subplot(122);
imshow(pic1);
title("顺时针旋转90度");

figure();是生成了一个新的图像窗口

3.8 顺时针旋转90度的完整代码

%在matlab中,%用来注释一行
%{   用来注释一段
%}close all;clear all;clc;
pic= imread("hallway.jpg");%M,N得到矩阵的行和列,1是索引,从1开始
%M,N是行数和列数,从零开始
[M,N]= size( pic(:,:,1));%得到三个通道各自的灰度值
red_channel= pic(:,:,1);
green_channel= pic(:,:,2);
blue_channel= pic(:,:,3);%第M行
for i= 1:M%第N列for j= 1:N%{原图* * ** * ** * ** * *旋转后* * * ** * * ** * * *%}%假设图像有4行M=4,3列N=3%举个例子,红色通道的第1行i=1,第1列j=1%是旋转后图像,通道1,第1行,第4+1-1=4列pic1(j,M+1-i,1) = red_channel(i,j);pic1(j,M+1-i,2) = green_channel(i,j);pic1(j,M+1-i,3) = blue_channel(i,j);end
end
figure();subplot(121);
imshow(pic);
title("原图");subplot(122);
imshow(pic1);
title("顺时针旋转90度");

四、 写逆时针将图像旋转90度的代码

仿写得到代码如下

%在matlab中,%用来注释一行
%{   用来注释一段
%}close all;clear all;clc;
pic= imread("hallway.jpg");%M,N得到矩阵的行和列,1是索引,从1开始
%M,N是行数和列数,从零开始
[M,N]= size( pic(:,:,1));%得到三个通道各自的灰度值
red_channel= pic(:,:,1);
green_channel= pic(:,:,2);
blue_channel= pic(:,:,3);%第M行
for i= 1:M%第N列for j= 1:N%{原图* * ** * ** * ** * *旋转后* * * ** * * ** * * *%}%假设图像有4行M=4,3列N=3%举个例子,红色通道的第1行i=1,第1列j=1%是旋转后图像的通道1,第3行,第1列%原来的第i=1,j=3%是旋转后图形的第1行,第1列%推出(i,j)上的灰度值,是旋转后(N+1-j,i)pic1(N+1-j,i,1) = red_channel(i,j);pic1(N+1-j,i,2) = green_channel(i,j);pic1(N+1-j,i,3) = blue_channel(i,j);end
end
figure();subplot(121);
imshow(pic);
title("原图");subplot(122);
imshow(pic1);
title("顺时针旋转90度");

结果如图

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

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

相关文章

鸿蒙预览报错 Only files in a module can be previewed

HarmonyOS第一课下载的源码无法运行,也无法预览,报错如题。 解决: 1、在预览页如“index.ets”文件下预览。 2、如果在通知栏看到如图提示,可看出是ohos/hvigor-ohos-plugin插件版本的问题,可点击蓝色解决方案同步并导…

springboot实现文件上传

SpringBoot默认静态资源访问方式 首先想到的就是可以通过SpringBoot通常访问静态资源的方式,当访问:项目根路径 / 静态文件名时,SpringBoot会依次去类路径下的四个静态资源目录下查找(默认配置)。 在资源文件resour…

msvcp120.dll丢失的解决方法,一步即可搞定dll丢失问题

在学习和工作中,我们经常会遇到各种问题和挑战。其中一个常见的问题是关于msvcp120.dll文件的丢失或损坏。本文将详细介绍msvcp120.dll是什么、msvcp120.dll的属性总体介绍以及msvcp120.dll对Windows系统的作用,并提供一些预防丢失的方法。 一&#xff0…

CASS打印图纸,字体显示变粗怎么解决

1、在CASS中图纸显示字体如下: 2、打印出来的字体显示如下: 解决方法: 在打印设置时,取消勾选“打印对象线宽” ,如下: 将其取消勾选后,在打印,就能得到图纸在软件中显示的效果了。…

重新配置node.js,npm,环境变量

起因是检查最近收到的一些朋友分享给我的各种资料,什么前端,后端,java,go,python等语言,想着将一个模拟QQ音乐的一个源代码进行跑通,看看有什么特别之处。如下图 出现了node环境路径问题,参考链接 https:/…

【设计模式】Java 设计模式之模板命令模式(Command)

命令模式(Command)的深入分析与实战解读 一、概述 命令模式是一种将请求封装为对象从而使你可用不同的请求把客户端与接受请求的对象解耦的模式。在命令模式中,命令对象使得发送者与接收者之间解耦,发送者通过命令对象来执行请求…

AI预测福彩3D第15弹【2024年3月21日预测--第3套算法重新开始计算第4次测试】

今天咱们继续对第3套算法进行第4次测试,第3套算法加入了012路的权重。废话不多说了,直接上结果吧~ 最终,经过研判分析,2024年3月21日福彩3D的七码预测结果如下: 百位:4 5 7 1 0 6 2 十位:3 1 5 …

森工新材料诚邀您参观2024杭州快递物流展会

2024杭州快递物流供应链与技术装备展览会 2024.7.8-10 杭州国际博览中心 参展企业介绍 深圳森工新材料科技有限公司。该公司致力于对传统包装材料的环保升级与替代,产品已广泛应用于日用消费品、工业生产、农业种植及医疗卫生领域。降解产品于2020年已入选国家邮政…

MySQL | 事务

目录 1. 前言 2. 什么是事务? 3. 为什么出现事物? 4. 事物的版本支持 4.1. 事务提交方式 5. 事务常见操作方式 6. 事务隔离级别 6.1. 隔离级别 6.2. 查看与设置隔离性 6.2.1. 查看 6.2.2. 设置 6.3. 读未提交[Read Uncommitted] 6.4. 读提交…

uniapp安装axios

先npm安装 npm i axios然后在项目里面建一个utils文件,再建一个index.js 以下是index.js代码: import axios from axios; const service axios.create({baseURL: //xxxx.xxxxx.com///你的请求接口域名, timeout: 6000, // request timeoutcrossDomai…

IPC网络摄像头媒体视屏流MI_VIF结构体

一个典型的IPC数据流 下图是一个典型的IPC数据流模型,流动过程如下: 1. 建立Vif->Vpe->Venc的绑定关系; 2. Sensor 将数据送入vif处理; 3. Vif 将处理后的数据写入Output Port申请的内存,送入下一级;…

ARM32day4

VID_20240319_210515 1.思维导图 2.实现三个LED灯亮灭 .text .global _start _start: 使能GPIO外设时钟 LDR R0,0x50000A28 LDR R1,[R0]使能GPIOE ORR R1,R1,#(0X1<<4)使能GPIOF ORR R1,R1,#(0X1<<5) STR R1,[R0]设置引脚状态 LDR R0,0X50006000 LDR R1,[R0…

34 vue 项目默认暴露出去的 public 文件夹 和 CopyWebpackPlugin

前言 这里说一下 vue.config.js 中的一些 public 文件夹是怎么暴露出去的? 我们常见的 CopyWebpackPlugin 是怎么工作的 ? 这个 也是需要 一点一点积累的, 因为 各种插件 有很多, 不过 我们仅仅需要 明白常见的这些事干什么的即可 当然 以下内容会涉及到一部分vue-cli,…

MySQL 更新执行的过程

优质博文&#xff1a;IT-BLOG-CN Select语句的执行过程会经过连接器、分析器、优化器、执行器、存储引擎&#xff0c;同样的 Update语句也会同样走一遍 Select语句的执行过程。 但是和 Select最大不同的是&#xff0c;Update语句会涉及到两个日志的操作redo log&#xff08;重做…

MySQL面试题--MySQL内部技术架构

目录 1.Mysql内部支持缓存查询吗&#xff1f; 2.MySQL8为何废弃掉查询缓存&#xff1f; 3.替代方案是什么&#xff1f; 4.Mysql内部有哪些核心模块组成&#xff0c;作用是什么&#xff1f; 5.一条sql发送给mysql后&#xff0c;内部是如何执行的&#xff1f;&#xff08;说…

【计算机网络篇】数据链路层(2)封装成帧和透明传输

文章目录 &#x1f95a;封装成帧和透明传输&#x1f388;封装成帧&#x1f388;透明传输&#x1f5d2;️面向字节的物理链路使用字节填充的方法实现透明传输。&#x1f5d2;️面向比特的物理链路使用比特填充的方法实现透明传输。 &#x1f6f8;练习 &#x1f95a;封装成帧和透…

Zabbix与Prometheus区别简述

Zabbix与Prometheus区别简述 历史沿革 一、监控工具简介 1、Zabbix https://www.zabbix.com/cn/download Zabbix是传统的监控系统&#xff0c;出现比云原生早&#xff0c;使用的是SQL关系型数据库&#xff1b;开源监控软件&#xff0c;遵守 GPLv2开源协议&#xff0c;起源于…

Aztec的客户端证明

1. 引言 隐私保护 zk-rollup 的证明生成与通用 zk-rollup 的证明生成有很大不同。原因是给定交易中存在特定数据&#xff08;由私有函数处理&#xff09;&#xff0c;我们希望保持完全私有。在本文中&#xff0c;我们探讨了用于证明私有函数正确执行的客户端证明生成&#xff…

QB 返回的数据格式

想要的效果: 而不是 $a[pm] [pm ,cover,power] 这种形式.对应的方法! public function withAttr($name, callable $callback null){if (is_array($name)) {foreach ($name as $key > $val) {$this->withAttr($key, $val);}return $this;}$this->options[with_attr…

web前端之小功能聚集、简单交互效果

MENU 纯CSS实现可编辑文字霓虹灯闪烁效果css之实现流水文字、闪烁、荧光、炫酷web前端之文本擦除效果与下划线结合css之下划线动画 纯CSS实现可编辑文字霓虹灯闪烁效果 效果图 html <h1 contenteditable"true">Hello World</h1>style * {margin: 0;pa…