MATLAB图像处理基础

MATLAB图像处理基础

2.2.1 图像文件格式及图像类型

1.MATLAB支持的几种图像文件格式:

⑴JPEG(Joint Photogyaphic Expeyts Group):一种称为联合图像专家组的图像压缩格式。

⑵BMP(Windows Bitmap):有1位、4位、8位、24位非压缩图像,8位RLE(Run length Encoded)的图像。文件内容包括文件头(一个BITMAP FILEHEADER数据结构)、位图信息数据块(位图信息头BITMAP INFOHEADER和一个颜色表)和图像数据。

⑶PCX(Windows Paintbrush):可处理1位、4位、8位、16位、24位等图像数据。文件内容包括文件头、图像数据和扩展色图数据。

⑷TIFF(Tagged Iamge File Format):处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。

⑸PNG(Portable Network Graphics):包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。

⑹GIF(Graphics Interchange Format):任何1位到8位的可交换的图像。

⑺HDF(Hierarchial Data Format):有8位、24位光栅图像数据集。

⑻ICO(Windows Icon resource):有1位、4位、8位非压缩图像。

⑼CUR(Windows Cursor resource):有1位、4位、8位非压缩图像。

⑽XWD(X Windows Dump):包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。

⑾RAS(Sun Raster image):有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。

⑿PBM(Portable Bitmap)。

⒀PGM(Portable Graymap)。

⒁PPM(Portable Pixmap)。

2.MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。有关它们的定义见下表2.1。

表2.1 图像类型及其对应的像素数据类型


图像类型


Double数据


uint8和uint16数据


二值图像


图像为m×n的整数矩阵,元素值范围[0,1]


图像为m×n的整数矩阵,元素值范围[0,1]


索引图像


图像为m×n的整数矩阵,元素值范围[0,p]


图像为m×n的整数矩阵,元素值范围[0,p-1]


灰度图像


图像为m×n的浮点数矩阵,元素值范围[0,1]


图像为m×n的整数矩阵,元素值范围[0,255]或[0,65535]


RGB图像


图像为m×n×3的浮点数矩阵,元素值范围[0,1]


图像为m×n×3的整数矩阵,元素值范围[0,255]或[0,65535]

其中,多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。cat函数可以将具有相同尺寸的几个独立图像存成多帧文件。对于多帧图像也可以从中提取单帧。

2.2.2 图像类型判断及转换

1.在MATLAB中如果要判断一个图像文件的类型,可使用如下指令:

l         isbw:若图像为二值图像,则返回真。

l         isgray:若图像为灰度图像,则返回真。

l         isind:若图像为索引图像,则返回真。

l         isrgb:若图像为RGB图像,则返回真。

2.在MATLAB系统中,要将一个类型的图像文件转换成另一个类型的图像文件,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。另外,要将灰度图像I转换成RGB图像,可运用cat指令。cat函数可以把一些单一的图像合并成图像序列。在图像序列中每个图像需有相同的大小,如果是索引图像,色图也要一致。

此外,MATLAB还提供了若干函数,用于图像类型的转换。这些函数有:

l         dither:用抖动法(dithering)转换图像。该函数通过颜色抖动(颜色抖动即改变边沿像素的颜色,使像素周围的颜色近似于原始图像的颜色,从而以空间分辨率来换取颜色分辨率)来增强输出图像的颜色分辨率。该函数可以把RGB图像转换成索引图像或把灰度图像转换成二值图像。

l         gray2ind:灰度图像或二值图像向索引图像转换。

l         grayslice:设定阈值将灰度图像转换为索引图像。

l         im2bw:设定阈值将灰度、索引、RGB图像转换为二值图像。

l         im2double:将图像数组转换为double型。

l         im2uint8:将图像数组转换为uint8型。

l         im2uint16:将图像数组转换为uint16型。该函数不支持二值图像序列的转换。

l         ind2gray:索引图像向灰度图像转换。

l         ind2rgb:索引图像向RGB图像转换。

l         mat2gray:将一个数据矩阵转换为灰度图像。

l         rgb2gray:RGB图像向灰度图像转换或将彩色色图转换成灰度色图。

l         rgb2ind:RGB图像向索引图像转换。包含三种不同方法:均衡量化、最小值量化、色图映射。

l         im2java:一般图像向Java图像转换。

l         label2rgb:标志图像向RGB图像转换。

2.2.3 图像的查询及读写

在MATLAB中要查询一个图像文件的信息,只要用imfinfo指令加上文件及其完整路径名即可。函数调用格式为:

info = imfinfo(filename,fmt)

info = imfinfo(filename)

参数fmt对应于所有图像处理工具箱中所有支持的图像文件格式。

MATLAB提供了两个重要的用于图像文件的读写的指令,分别是从图像文件中读取数据的imread,以及将数据写入到图像文件中的imwrite。

1.imread的常见调用格式为:

A = imread(filename,fmt)

其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。如果filename所指的为灰度级图像,则A为一个二维矩阵;如果filename所指的为RGB图像,则A为一个m×n×3的三维矩阵。Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。

  imread的其他几种重要的调用格式为:

[X,map] = imread(filename.fmt)

[…] = imread(filename)

[…] = imread(URL,…)

[…] = imread(…,idx)           (CUR,ICO and TIFF only)

[…] = imread(…,’frames’,idx)    (GIF only)

[…] = imread(…,ref)           (HDF only)

[…] = imread(…,’BackgroundColor’,BG)    (PNG only)

[A,map,alpha] = imread(…)      (ICO,CUR and PNG only)

上面一些参数的含义如下:idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。ref是指整数值。alpha是指透明度。

2.imwrite的常用调用格式为:

imwrite(A,filename,fmt)

imwrite(X,map,filename,fmt)

imwrite(…,filename)

imwrite(…,Param1,Val1,Param2,Val2…)

其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。

  在MATLAB中,默认的保存类型是uint8。由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。

2.2.4 图像的显示

显示图像的最基本的手段是使用image函数。该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。

imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。imshow可用于显示各类图像。对于每类图像,调用方法如下:

l         imshow filename:显示图像文件。

l         imshow(BW):显示二值图像,BW为黑白二值图像矩阵。

l         imshow(X,map):显示索引图像,X为索引图像矩阵,map为色彩图示。

l         imshow(I):显示灰度图像,I为二值图像矩阵。

l         imshow(RGB):显示RGB图像,RGB为RGB图像矩阵。

l         imshow(I,[low high]):将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[low high]用于定义待显示数据的范围。

有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。

l         colorbar:为图像的显示增加一个颜色条,这一用法对于了解被显示图像的灰度级别特别有用。

l         getimage:获取图像数据。

l         immovie:将多帧索引图像制作成连续图像格式。其调用格式为:

mov = immovie(D,map)

不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。对于其他类型图像,则需要首先将其转换为索引图像。

l         montage:多帧图像的一次显示。它能将每一帧分别显示在一幅图像的不同区域,所有子区的图像都用同一个色彩条。

l         movie:播放多帧连续图像。

l         subimage:在一个图形区域内显示多个图像。

l         truesize:调整图像显示的尺寸。

l         warp:显示图像的纹理表面图。前面提到的图像显示手段都只能在二维平面上显示,MATLAB6.5的一个强大功能是能将平面图像显示在空间三维曲面上。这是由warp函数的纹理成图功能来实现的,该功能能通过双线性插值将平面图像投影到三维曲面上。

l         zoom:将图像或二维图形进行放大或缩小显示。zoom本身是是一个开关键,zoom on用于打开缩放模式,zoom off用于关闭该模式,zoom in用于放大局部图像,zoom out用于缩小图像。

至于多个图像的显示,则可分为两个方面:在不同的图形窗口显示不同的图像,可以用figure指令来实现;在同一个图形窗口显示多图,可以用subplot来实现。

第三章 图像运算

3.1 图像的点运算

点运算将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的值决定。它常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。点运算因其作用性质,也被称为对比度增强、对比度拉伸或灰度变换。在真正进行图像处理之前,有时可以用点运算来克服图像数字化设备的局限性。

点运算实际上是灰度到灰度的映射过程。点运算不会改变图像内像素点之间的空间关系。设输入图像为A(xy),输出图像为B(xy),则点运算可表示为:

B(xy) = [A(xy)]                (3-1)

点运算可完全由灰度变换(gray-scale transformation)函数s=(r)决定,后者描述了输入灰度级与输出灰度级之间的映射关系。图像的点运算分为线性点运算和非线性点运算两种。

3.1.1 线性点运算

线性点运算是指灰度变换函数f为线性函数时的运算。

如图3.1,当a>1时,输出图像对比度增大;当a<1时,输出图像对比度降低;当a=1,b=0时,输出图像就是输入图像的简单复制;当a=1,b≠0时,仅使输出图像的灰度值上移或下移,其效果是使整个图像更亮或更暗。如果a为负值,暗区域将变亮,亮区域将变暗,点运算完成了图像求补。

除了调节对比度以外,还有一种典型的线性点运算的应用就是灰度标准化。设灰度图像为I[W][H],其中W表示图像宽度,H表示图像的高度,那么灰度图像的平均灰度和方           图3.1 线性函数

差由如下计算公式得到:

平均灰度:

(3-2)

方差:

(3-3)

可以将其变换为具有相同均值和方差的变换函数(线性映射),其形式如下:

(3-4)

其中σ0和u 0为给定的变换参数。灰度标准化可以用来生成一些常用的平均模型。

3.1.2 非线性点运算

非线性点运算对应于非线性映射函数,典型的映射包括平方函数、对数函数、截取函数(窗口函数)、域值函数、多值量化函数等。

阈值化处理是最常用的一种非线性点运算,它的功能是选择一阈值,将图像二值化,然后使用生成的二进制图像进行图像分割及边缘跟踪等处理。

直方图均衡化也是一种非常常用的非线性点运算。它是指将一个已知灰度分布的图像使用某种非线性灰度变换函数进行计算,使运算结果变成一幅具有均匀灰度分布的新图像。经过直方图均衡化的点运算处理后,实际的直方图将呈现参差不齐的外形,这是由于灰度级的可能个数是限造成的。在一些灰度级处可能没有像素,在另外一些灰度级处则像素很拥挤。

点运算的MATLAB实现:

I=imread(‘rice.png‘);

rice=double(I);

rice2=rice*0.5+50;

J=uint8(rice2);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(J);

时间: 2024-10-26 07:11:23

MATLAB图像处理基础的相关文章

Matlab图像处理系列1———线性变换和直方图均衡

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操作,直方图是对像素灰度值的统计,直方图均衡是对灰度值分布的变换. 1.灰度线性变换 (1)线性变换函数 原图向灰度值为g,通过线性函数f(x)=kx+b转换为f(g)得到灰度的线性变换. (2)代码实现 Matlab中支持矩阵作为函数参数传入,定义一个线性转换函数,利用Matlab矩阵操作,用一行代

MATLAB图像处理——学习笔记

由于工作需要,开始研究一下MATLAB图像处理相关的知识,图像处理只是matlab应用领域中小小的一部分而已.以前只是听说过MATLAB很强大,但没有系统的学过,如今开始学时,发现matlab确实很不错.很高大上.操作起来很方便,特别是编写程序时,比C语言更简洁. 很多人都是大学里就学过matlab的,由于是半路出家,所以知识不是很全面,直接拿了一本冈萨雷斯的MATLAB版的书就开始看,下面做一些简单的小记录. 1. matlab命令基础: clc--清除窗口 clear--清除之前赋值过的变量

Python计算机视觉编程-第一章 图像处理基础

图像处理基础 测试1:PIL:Python图像处理类库 PIL(Python Imaging Library,图像处理库)提供了通用的图像处理功能,以及大量有用的基本图像操作.PIL库已经集成在Anaconda库中,推荐使用Anaconda,简单方便,常用库都已经集成.也可以安装python(x,y),但是我一直安装失败,所以就没有装,没有安装也可以自己导入,比如我就是用的pycharm自己导入. 如果安装失败,可以添加一些镜像网站,在进行下载 代码不报错之后,运行代码: 测试代码: # -*-

学习笔记(2)---Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一.通用函数: colorbar  显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \

Atitit MATLAB 图像处理 经典书籍attilax总结

1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读] - 当当图书.html1 1.3. 数字图像处理(MATLAB版)(第二版)(本科教学版)2 1.1. MATLAB数字图像处理 第1章 图像处理与MATLAB2007a简介 第2章 图像的编码和解码 第3章 图像复原 第4章 图像处理的相关操作 第5章 图像频域变换 第6章 图像处理中的代数运算及几何变换 第7章 图像增强 第8章 图像分割与边缘检测 第9章 小波分析

用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器

平时不怎么玩游戏,有时消遣就玩玩QQ里的2D桌球,但是玩的次数少,不能像骨灰级玩家一样百发百中,肿么办呢?于是某天突发奇想,决定自己也来做个“外挂”.说是外挂,其实只是一个瞄准器,毕竟外挂是修改别人的软件,有点违法的意思,况且自己还没有能力去那么做,所以自己还是弄个瞄准器,做做弊,过下小瘾,同时也提高一下自己的编程能力. 起初(也就是半年前),自己尝试做一个瞄准器的初始版本,用C#做,想法很简单: Step1.把鼠标移到洞口,获取鼠标位置: Step2.将鼠标放到要击打的球的圆心上,获取鼠标当前

Matlab编程基础

平台:Win7 64 bit,Matlab R2014a(8.3) "Matlab"是"Matrix Laboratory" 的缩写,中文"矩阵实验室",是强大的数学工具.本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计.值得一提的是,Matlab从R2014a版本开始支持中文语言了! 1.基本概念 Matlab默认启动后界面: Matlab有关的文件后缀: File Extension Des

[转载]matlab图像处理为什么要归一化和如何归一化

matlab图像处理为什么要归一化和如何归一化,一.为什么归一化1.   基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变换 图像归一化使得图像可以抵抗几何变换的攻击,它能够找出图像中的那些不变量,从而得知这些图像原本就是一样的或者一个系列的. 因为我们这次的图片有好多都是一个系列的,所以老师把这个也作为我研究的一个方向. 我们主要要通过归一化减小医学图片由于光线不均匀造成的干扰.2.matlab里图像数据有时候必须是

C#-Emgu.CV-------视频截取和图像处理基础

转:http://blog.sciencenet.cn/blog-538909-694431.html mage<Bgr, Byte> frame = capture.QueryFrame();//获取摄像头的视频帧Image<Bgr, Byte> frame2 = frame.Convert<Bgr, Byte>(); //将帧转换为RGB类型,对应为三维数组Image<Gray, Byte> grayFrame = frame.Convert<Gr