Image Processing——图像处理教程(二)之MATLAB基础
图像处理的MATLAB基础
一、MATLAB在图像处理领域的优点
优秀的矩阵运算能力
在图像处理教程(一) 中我们提到每一张图片都可以看做是一个由像素点组成的矩阵,黑白图片用一个二维矩阵就可以表示,彩色图片则要用三个二维矩阵,分别表示RGB三个颜色通道。
而MATLAB是十分擅长处理矩阵运算的科学计算软件,所以MATLAB处理图像信息就格外方便。
例如:一维向量可以表示为声音信号在时域上的离散采样信息,即可以表示一个声音信号;二维矩阵自然可以表示图像信息。
MATLAB内置了许多函数可以对矩阵做各样的处理,如sum()函数,mean()函数,imread(),imwrite()函数等等。
友好的编程语言与操作界面
不像其他高级语言(如C语言),在使用变量前必须预先定义变量,声明其数据类型,MATLAB可以直接对任意变量展开操作而不需要预先声明,MATLAB会自动为变量分配内存,确定其数据类型等。这无疑为我们编写程序带来了极大方便。
MATLAB的界面也十分友好,它既支持我们用MATLAB语言编写脚本、函数文件完成特定工作,也支持交互式的操作形式,比如种类丰富的工具箱Toolbox,许多工作动动鼠标即可完成。
二、MATLAB图像处理相关函数
本节内容的主要内容是向大家介绍一些常用的、必备的MATLAB图形处理函数。熟练掌握这些函数的用法对于以后的工作有着莫大的好处。下面我们从读取图片开始。
读取图片
myimage = imread('newborn.tif');
myimage是一个矩阵,存储着newborn.tif图片的像素信息;在imread( )函数中,以字符串的形式给出图片的名称。如果MATLAB的工作路径和图片存放的路径不一致,则要写成如下的形式,不然MATLAB会给出找不到图片的错误。
imread ('D:/dataset/image/newborn.tif');
% 注意语句后面的分号不要省略,否则我们的command window会被庞大无比的像素矩阵充满
显示图片
在读入整张图片之后,我们可以用imshow()命令将图片显示出来。
figure(1);
I = imshow(myimage);
title('newborn.tif');
为了查看图片上某点的坐标和RBG值(或者灰度值),我们可以使用下面的函数:
impixelinfo; %注意,pixval on早在MATLAB 2008a就已经淘汰了
输入上面命令后,图片的左下角会出现一行信息,随着鼠标的滑动,显示不同点的左边和RGB信息(或灰度值信息)。
使用如下命令可以调整figure窗口的背景颜色:
% 调整背景为绿色
whitebg ('g');
whitebg ('green');
whitebg ([0 1 0]);% 绿色的RGB值
% 其他颜色还有 Cyan blue white magenta yellow red black 等等
获取图片信息
size(myimage)% 可以显示矩阵的大小尺寸,几行几列几页myimage(100,200,2)% 显示第2页第100行第200列的值impixel(myimage,100,200)% 显示myimage图片在100行200列处的色彩值imfinfo('name_of_img.jpg');% 可以显示图片的详细信息
impixel的用法
写入图片
有时我们需要将处理结果以图片的形式写入某个位置,这就会用到下面的函数。
% 函数参数格式
imwrite(X,map,'filename','fmt');
% 例子,可以用来转换图片格式,tif->png
a = imread('autumn.tif');
imwrite(a,'autumn.png','png');
命令中的X是要存储图片的像素矩阵,map是该图片的colormap(可选项),两个字符串表示待写图片的名字和格式。
生成伪彩色图片
% 输入一张灰度图名称,不必键入单引号
im=input('Enter the file name (gray level image) :','s');
k=imread(im);
% k是读入的照片,灰度图的z=1
[x y z]=size(k);
% 将uint8格式转换为double格式
k=double(k);
% 对灰度图做变换,生成三个色彩通道
for i=1:xfor j=1:yif k(i,j)>=0 & k(i,j)<50m(i,j,1)=k(i,j,1)+5;m(i,j,2)=k(i,j)+10;m(i,j,3)=k(i,j)+10;endif k(i,j)>=50 & k(i,j)<100m(i,j,1)=k(i,j)+35;m(i,j,2)=k(i,j)+28;m(i,j,3)=k(i,j)+10;endif k(i,j)>=100 & k(i,j)<150m(i,j,1)=k(i,j)+52;m(i,j,2)=k(i,j)+30;m(i,j,3)=k(i,j)+15;endif k(i,j)>=150 & k(i,j)<200m(i,j,1)=k(i,j)+50;m(i,j,2)=k(i,j)+40;m(i,j,3)=k(i,j)+25;endif k(i,j)>=200 & k(i,j)<=256m(i,j,1)=k(i,j)+120;m(i,j,2)=k(i,j)+60;m(i,j,3)=k(i,j)+45;endend
end
% 显示原图像
figure,imshow(uint8(k),[]);
% 显示生成的伪彩色图片
figure,imshow(uint8(m),[]);
256色、高彩色、真彩色
每个像素的色彩表示可以用多位二进制数表示。
用1bit只能表示黑或白,即二值图像。
用8bit即可表示256种颜色,所以MATLAB读入的图片矩阵常有uint8的数据格式,8个bit中2个bit表示蓝色、分别用3个bit表示红色和绿色。
高彩色(High Color)可以表示65536种颜色,更加接近真实。
而真彩色(True Color)有24bit来表示每个像素的色彩值,最多有16,777,216种颜色,当然储存空间响应也要增大。
MATLAB中常用的数据类型
注意:数据类型不同的变量之间不能做运算,需要用转换函数先进行一步转换。
% 示例代码
% 原始图片
[em,emap] = imread(‘trees.tif');
figure, imshow(em,emap);
% 索引图转换成灰度图
ygray = ind2gray(em, emap);
figure, imshow (ygray);
% 灰度图转换成索引图
[y, map] = gray2ind(ygray);
figure, imshow (y);
% 读入原始图片
im = imread('twins.tif');
figure,imshow(im);
% rgb图像转灰度图
yim = rgb2gray(im);
figure,imshow(yim);
% 灰度图转RGB图
yim2 = gray2rgb(yim);
figure,imshow(yim2);
% 读入原始图像
RGB = imread('peppers.png');
% rgb图像转换为128色的索引图
[X,map] = rgb2ind(RGB,128);
figure, imshow(X,map);
% rgb图像转换为256色的索引图
[X,map] = rgb2ind(RGB,256);
figure, imshow(X,map);
% rgb图像转换为2色的索引图
[X,map] = rgb2ind(RGB,2);
figure, imshow(X,map);
% 索引图转换为rgb图
[em,emap] = imread('emu.tif')
figure, imshow(em,emap)
y = ind2rgb(em,emap)
figure, imshow(y)
以上我们展示了二值图、灰度图、色彩图、索引图之间的相互转换过程,具体的函数应用可以在command window下键入help rgb2gray
等命令来获取详细信息。
三、小练习
1)试着在MATLAB的命令窗口键入help imdemos
,之后命令窗口会给出Image Processing Toolbox中所有的示例(sample)。列一个表格,看看有多少个样本图片。
对每一张图片,试着确定它的类型(二值图、灰度图、真彩色、索引色)
确定图片的尺寸,在像素层面。
下面是答案:
Sample TIFF images:
autumn.tif,
board.tif,
cameraman.tif,
canoe.tif,
cell.tif,
circbw.tif,
circuit.tif,
eight.tif,
forest.tif,
kids.tif,
logo.tif,
m83.tif,
moon.tif,
mri.tif,
paper1.tif,
pout.tif,
shadow.tif,
spine.tif,
tire.tif,
trees.tif.
Binary:
circbw.tif (3822),
logo.tif (1074).Grayscale:
cameraman.tif (65536),
cell.tif (30369),
circuit.tif (76160),
eight.tif (74536),
moon.tif (192246),
paper1.tif (51296),
pout.tif (69840),
tire.tif (47560).True color:
autumn.tif (213210),
board.tif (594864),
forest.tif (134547).Indexed color:
canoe.tif (71622),
forest.tif (134547),
kids.tif (127200),
m83.tif (151200),
mri.tif (16384),
shadow.tif (66454),
spine.tif (179830),
trees.tif (90300).
2)找一张灰度图,然后利用imwrite()
函数将其写为JPEG、PNG、BMP格式的图片,并且比较他们各自的大小。
Image Processing——图像处理教程(二)之MATLAB基础相关推荐
- matlab基础及应用教程,初学者宝典—Matlab基础及其应用教程 PDF 文字版[2M]
内容简介: <高等教育计算机学科"应用型"规划教材:MATLAB基础及其应用教程>由基础知识和应用两大部分组成.基础知识部分详细介绍了MATLAB基础准备与入门.基本的 ...
- matlab基础教程第一讲,matlab基础第一讲
(完整版)matlab第一讲教案_数学_高中教育_教育专区.西南科技大学本科生课程备课教案计算机技术在安全工程中的应用--Matlab 入门及应用授课教师:徐中慧 班级: 专业...... 2012 ...
- 【MATLAB图解教程1】MATLAB基础知识
⭐️引言⭐️ 大家好哇!马上就要数学建模比赛了,这周Sonesang将为大家带来MATLAB基础教程,希望在准备数学建模的过程中,能够和大家一起分享学习过程!
- matlab基础教程实验报告,Matlab基础实验报告.doc
Matlab基础实验报告 南昌大学实验报告(信号与系统) 学生姓名: 肖江 学 号: 6100210030 专业班级: 电子103班 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 20 ...
- Image Processing——图像处理教程(一)
写在前面:本教程由西安电子科技大学 电子工程学院 全光吉教授学院选修课<视频图像处理>英文讲稿修改而来.本博客做了相关内容的翻译和些许修改.在必要的地方对教程涉及到的代码进行了解释. Ch ...
- 【Cocos2d入门教程二】Cocos2d-x基础概念
上一章已经学习了环境的搭建.这一章对基础概念进行掌握.内容大概有: 1.导演 2.场景 3.节点 4.层 4.精灵 1.导演(Director) 导演存在的主要作用: 环境设定(帧率 初始化openG ...
- Linux命令入门教程(二):目录基础篇
2.1 目录及路径基础介绍 在linux中,目录(directory)通常也可表述为路径,一般不叫文件夹. 文件系统中,目录树的起点为根目录,任何路径都能以根目录来寻址. 以"/" ...
- MATLAB教程二:MATLAB矩阵处理
文章目录 2.1 特殊矩阵 2.2 矩阵变换 2.3 矩阵求值 2.4 稀疏矩阵 2.1 特殊矩阵 通用的特殊矩阵: zeros函数:产生全0矩阵,即零矩阵. ones函数:产生全1矩阵,即幺矩阵. ...
- Matlab学习一本通,matlab基础教程
链接:https://pan.baidu.com/s/1uTCbiRfIxcrt6lmiy6_QlQ 提取码:f2dn Matlab学习一本通,matlab基础教程 <MATLAB R201 ...
最新文章
- 深度特征合成与遗传特征生成,两种自动特征生成策略的比较
- Windows:系统环境变量配置提示系统环境变量太大的问题三种解决方案亲测可用
- C++ 通讯录设计(五)
- 星巴克“猫爪杯”遭国人疯抢 而 “大白兔冰淇淋”在美国大火
- [NOIp2017 TG Day2 T2] 宝藏
- Axure教程-新手入门基础(小白强烈推荐!!!)
- 用arcgis裁剪面时出错,ERROR 999999: 执行函数时出错
- 2021牛客暑假多校第二场 I题—Penguins
- linux怎么样用终端打开百度,linux下用终端访问百度网站.doc
- pythonrender函数_Render函数
- python3.8安装robotfrmework-ride安装及报错完美解决方法
- 用户登录 默认 计算机 用户文件,guest登录系统默认禁止guest访问本地计算机(组图)...
- 模拟银行ATM存款存取款的相关功能
- 数据结构-图-知识点总结
- 违规对店铺综合质量评分、个性化推荐影响 以及标题 、修改sku的影响
- 安装win10,刻录U盘,还原刻录的U盘
- 多元线性回归的正规方程解
- 航天,百旺组件开票调用说明
- chrome提示不安全
- 四十七、MySQL数据库4
热门文章
- 「F5 连接NetOps/SecOps与DevOps」 -- 「4」Declarative Onboarding
- 防不胜防的WiFi屏蔽器
- 一阶电路暂态响应的结果分析。_配网小电流接地选线方案分析(二)
- 拼多多5.6面试题总结
- Prometheus学习笔记(三)Alertmanager报警模块集成钉钉/企业微信机器人
- GitHub 收购 Pull Panda 并免费提供服务;Top 500 超算现成为 Petaflop 俱乐部
- 网络工程师成长日记162-网络工程师的定位
- 餐饮机器人AB面:有人离场、有人挺进
- [互动抽奖]感谢大家的支持!!!
- 如何管理和维护算法族?只需知道策略模式