1带你入门MATLAB图像处理图像类型转换(附matlab程序)

news2024/10/6 10:30:02

1.简述

      学习目标:  图像类型的转换

常用图像格式

图像格式:是存储图像采用的文件格式。不同的操作系统、不同的图像处理软件,所支持的图像格式都有可能不同。 在实际应用中经常会遇到的图像格式有:BMP、GIF、TIFF、PCX、JPEG、PSD、PCD、 WMF等。 (1) BMP(Bitmap)文件 (2)GIF文件 (3)TIF文件 (4)JPEG文件

MATLAB图像类型

图像类型:是指数组数值与像素颜色之间定义的关系,它与图像格式概念有所不同。 在MATLAB图像处理工具箱中,有五种类型的图像: 1. 二进制图像 在一幅二进制图像中,每一个像素将取两个离散数值(0或1)中的一个,从本质上说,这两个数值分别代表状态“开”(on)或“关”(off)。 二进制图像仅使用unit8或双精度类型的数组来存储。 在图像处理工具箱中,任何返回一幅二进制图像的数组均使用unit8逻辑数组存储该图像,并且使用一个逻辑标志来指示unit8逻辑数组的数据范围。 若逻辑状态为“开”(on),数组范围为[0,1];若为“关”(off),则数组范围为[0,255]。

  1. 索引图像 索引图像:是一种把像素值直接作为RGB调色板下标的图像。 在MATLAB中,索引图像包含有一个数据矩阵X和一个颜色映射(调色板)矩阵map。数据矩阵:可以是unit8、unit16、双精度类型的; 颜色映射矩阵map:是一个m×3的数据矩阵,其中每个元素的值均为[0,1]之间的双精度浮点型数据,map矩阵的每一行分别表示红色、绿色和蓝色的颜色值。 索引图像可把像素值直接映射为调色板数值,每一个像素的颜色通过使用X的数值作为map的下标来获得,如值1指向矩阵map中的第一行,值2指向第二行,依此类推。 颜色映射通常与索引图像存储在一起,当装载图像时,MATLAB自动将颜色映射表与图像同时装载。 图像矩阵与颜色映射表之间的关系依赖于图像数据矩阵的类型。 如果图像数据矩阵是双精度类型,则数据1指向矩阵map中的第一行,数据值2将指向map中的第二行,依此类推; 如果图像矩阵是unit8或unit16类型时,将产生一个偏移,即数值0表示矩阵map中的第一行,数据值1将指向map中的第二行,依此类推。
  2. 灰度图像 灰度图像通常由一个unit8、unit16、双精度类型的数组来描述,其实质是一个数据矩阵I,该矩阵中的数据均代表了在一定范围内的灰度级,每一个元素对应于图像的一个像素点,通常0代表黑色,1、255、65 535(针对不同存储类型)代表白色。
  3. 多帧图像 多帧图像是一种包含多幅图像或帧的图像文件,又称为多页图像或图像序列。 在MATLAB中,它是一个四维数组,其中第四维用来指定帧的序号。 在一个多帧图像数组中,每一幅图像必须有相同的大小和颜色分量,每一幅图像还要使用相同的调色板。另外,图像处理工具箱中的许多函数(如:imshow)只能对多幅图像矩阵的前两维或三维进行操作,也可以对四维数组使用这些函数,但是必须单独处理每一帧。如果将一个数组传递给一个函数,并且数组的维数超过该函数设计的超作维数,那么得到的结果是不可预知的。
  4. RGB图像 RGB图像又称为真彩色图像,它是利用R、G、B三个分量表示一个像素的颜色,R、G、B分别代表红、绿、篮3种不同的颜色,通过三基色可以合成出任意颜色。所以对一个尺寸为n×m的彩色图像来说,在MATLAB中则存储为一个n×m×3的多维数据数组,其中数组中的元素定义了图像中的每一个像素的红、绿、篮颜色值。图形文件格式把RGB图像存储为24位的图像,红、绿、篮分量分别占用8位。 MATLAB的RGB数组可以是双精度的浮点型、8位或16位无符号的整数类型。在一个双精度类型的RGB数组中,每一个颜色分量都是一个[0,1]范围内的数值。如:颜色分量为(0,0,0)的像素将显示为黑色;颜色分量为(1,1,1)的像素将显示为白色。每一个像素的三个颜色分量都存储在数组的第三维中。如:像素(10,5)的红、绿、篮颜色值分别保存在元素RGB(10,5,1)、RGB(10,5,2)、RGB(10,5,3)中。

2.代码及运行结果


%%  将索引图像转换为RGB图像
clear all;
close all;
[X,map]=imread('trees.tif','tif'); %读取索引图像,X是数据,map是调色板
RGB=ind2rgb(X,map);                %将索引图像转换为RGB图像
figure;
imshow(RGB);                       %显示RGB图像
set(gcf,'position',[500,500,600,600]);    


%%  将RGB图像转换为索引图像
clear all;
close all;
RGB=imread('peppers.png');     %读取RGB图像
[X,map]=rgb2ind(RGB,12);       %将RGB图像转换为索引图像  调色板大小是12行  该值越大越清晰  
figure;
imshow(X,map);
set(gcf,'position',[400,400,600,600]);

 


%%  将RGB图像转换为灰度图像
clear all;
close all;
RGB=imread('peppers.png','png');
I=rgb2gray(RGB);
figure;
imshow(I);
set(gcf,'position',[300,300,500,500]);

 
%%  
clear all;
close all;
[X,map]=imread('trees.tif','tif');
newmap=rgb2gray(map);       %只将调色板转换为灰度
figure;
imshow(X,newmap);         %新的调色板,数据不变
set(gcf,'position',[400,400,600,600]);


%%
clear all;
close all;
X=imread('rice.png');     %读取一个灰度图像
Y=grayslice(X,12);        %将灰度图像转换为索引图像
figure;
imshow(Y,jet(12));         %通过调色板jet给图像上颜色
set(gcf,'position',[400,400,600,600]);


%%  将索引图像转换为灰度图像
clear all;
close all;
[X,map]=imread('trees.tif','tif');
I=ind2gray(X,map);
figure;
imshow(I);
set(gcf,'position',[400,400,600,600]);


%%   将RGB图像转换为二值图像
clear all;
close all;
RGB=imread('peppers.png');
bw=im2bw(RGB,0.4);    %  归一化阈值是0.4    二值图像只有黑色和白色
figure;
imshow(bw);
set(gcf,'position',[400,400,500,600]);

 


%%  
clear all;
close all;
A=rand(400,400);     %建立一个数据矩阵
I=mat2gray(A);       %将数据矩阵转换为灰度图像
figure;
imshow(I);            
set(gcf,'position',[200,200,400,300]);

 

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

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

相关文章

FFmpeg5.0源码阅读——avformat_open_input

摘要:本文主要描述了FFmpeg中用于打开文件接口avformat_open_input的具体调用流程,详细描述了该接口被调用时所作的具体工作。   关键字:ffmpeg、avformat_open_input   注意:读者需要了解FFmpeg的基本使用流程,以…

力扣动态规划专题(五)子序列问题 不连续子序列与连续子序列 步骤及C++实现

文章目录 300.最长递增子序列674.最长连续递增子序列动态规划贪心算法 718. 最长重复子数组二维dp数组一维dp数组 1143.最长公共子序列1035.不相交的线53. 最大子序和动态规划贪心算法 300.最长递增子序列 步骤 确定dp数组以及下标的含义 dp[i]:i之前(包…

【数据结构】单链表 创建 插入 删除 查找 完整代码

3.1 单链表 3.1.1 定义 注: 元素离散的分布在存储空间中,所以单链表是非随机存取的存储结构。 即不能直接找到表中某个特定的结点,需要从表头开始遍历,依次查找。 定义的代码 typedef struct LNode {ElemType data;//每个节点存放…

第三章 处理机调度与死锁

目录 一、调度的概念、层次 2.1 调度的基本概念 2.2 调度的三个层次 2.2.1 高级调度 2.2.2 低级调度 2.2.3 中级调度 2.2.3.1 进程的挂起态 2.2.4 三层调度的联系、对比 二、进程调度的时机、切换与过程、方式 2.1 进程调度的时机 2.2 进程调度的方式 2.2.1 非抢占…

计网复习题

一、单项选择题 OSI参考模型的物理层负责()。 A.格式化报文 B.为数据选择通过网络的路由(网络层) C.定义连接到介质的特性 D.提供远程文件访问能力(应用层) 下列选项中,不属于网络体系结构中所…

常用git操作总结

文章目录 一、git 分支命名规范(1)master 主分支(2)develop 开发分支(3)feature 分支(一般简写为feat)(4)hotfix 分支(一般简写为fix)…

如何用canvas实现一个富文本编辑器

富文本编辑器相信大家都用过,相关的开源项目也很多,虽然具体的实现不一样,但是大部分都是使用DOM实现的,但其实还有一种实现方式,那就是使用HTML5的canvas,本文会带大家使用canvas简单实现一个类似Word的富…

分布式系统学习第四天 fastcgi学习

目录 1. Nginx作为web服务器处理请求 2. http协议复习 3. fastCGI 3.1 CGI 3.3 fastCGI和spawn-fcgi安装 3.4 nginx && fastcgi 3.5我的总结 其他知识点 1. Nginx作为web服务器处理请求 nginx不能处理动态请求 因此把请求发送给fastCGI对动态请求进行处理 静态…

区块链基础之密码学及安全技术

1.2 密码学及安全技术 1.2.1 密码学知识 1.2.1.1 Hash函数 Hash(哈希) 哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为 固定长度的输出值,并且是不可逆的。其输出值称为哈希值,也称为散列值。 哈希算法…

越权漏洞学习-做你做不了的事情

(一)、什么是越权漏洞 1、了解越权漏洞: 越权漏洞是指一个用户或者一个攻击者通过利用系统中某一漏洞,可以获得超过其正常权限的权限。也就是说,越权漏洞会使攻击者能够执行未经授权的操作或访问受保护的资源 简单来…

从开发人员的视角面对c盘容量紧缺的一些方案

前言 随着时代的发展,固态价格不断地下降,电脑硬盘容量水平线在不断地上升,近几年新出的主流笔记本自带固态容量也基本上在256G以上。所以通常不会有容量不够而带来的烦恼。个人用户往往是因为视频、游戏等文件占用了大量容量,针…

mmrotate调研

mmrotate调研 MMrotate是什么? ​ 在真实场景中,我们见到的图像不都是方方正正的,比如扫描的图书和遥感图像,需要检测的目标通常是有一定旋转角度的。这时候就需要用到旋转目标检测方法,对目标进行精确的定位&#x…

第三方库介绍——mosquitto

文章目录 概述程序(指令)说明安装服务端与客户端服务端指令配置配置文件:mosquitto.conf认证配置:pwfile权限配置:aclfile启动服务器,选择配置文件:mosquitto.conf 测试发布指令:订阅…

基于立创EDA的原理图设计进阶(实战开发一个小项目)

目录 学习目标 原理图设计进阶——空气质量检测仪 项目需求 1、功能性需求分析 2、非功能性需求 硬件框架图 元器件选型 MCU sensor LCD WIFI KEY PWOER 原理图设计 元件PCB封装设计-DIP,SOP 理论知识 直插式 贴片式 学习目标 1、熟悉电子产品设…

网络编程详细讲解

网络编程 网络通信 网络 ip 地址 1.概念:用于唯一标识网络中的每台计算机/主机 2.查看ip地址:ipconfig 3.ip地址的表示形式:点分十进制XX.XX.XX.XX 4.每一个十进制数的范围:0~255 5.ip地址的组成网络地址主机地址&#xff0…

团体程序设计天梯赛-练习集L2篇①

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

Python3学习之列表

目录 1.访问列表中的值 2.更新列表 3.删除列表元素 4.Python列表脚本操作符 5.Python列表截取与拼接 6.嵌套列表 7.列表比较 8.Python列表函数&方法 序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索…

Go语言doc

1、Go语言doc go doc 命令可以打印附于 Go 语言程序实体上的文档,我们可以通过把程序实体的标识符作为该命令的参数来 达到查看其文档的目的。 所谓Go语言的程序实体,是指变量、常量、函数、结构体以及接口,而程序实体的标识符即是代表它们…

JDBC 和数据库连接

JDBC 和数据库连接 基本介绍 JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。JDBC的基本原理图[重要&#xff…

CSDN 个性化推荐系统的设计和演进

个性化推荐项目 个性化推荐的设计和演进项目概览项目梳理依赖管理实现代码的重构和改进持续演化 个性化推荐的设计和演进 CSDN 的个性化推荐系统,是从既有的推荐项目中剥离出来的一个子项目,这个项目随后移交到了我们AI组。在近一年的时间内&#xff0c…