Matlab系列记录之图像处理(结束篇)
前言
对于图像处理,我现在也是一知半解的程度,毕业后基本就没接触这些东西了,如果有理解的不对的地方,欢迎指出~
只介绍下一些基本原理和MATLAB上进行图像处理的一些基本操作了,复杂了,我也估计搞不来了,是DIP大佬就可以忽略本篇了…/手动滑稽
图像知识
图像类型
常用或者经常听到的一些图像类型:RGB图、灰度图还有二值化图像等等等。
1、RGB图
顾名思义,由R、G、B三种分量组成的图像,这三种分量分别对应红、绿、蓝,在Matlab上以三维矩阵的形式进行存储,数值在0~255的区间,如果值全是0([0,0,0]),则表示黑色;反之全255([255,255,255]),就是代表白色了。
2、灰度图
灰度图,也称亮度图,在Matlab中是以二维矩阵的形式进行存储,矩阵的每个元素都代表一个像素的灰度值,取值范围也是0~255。
3、二值化图
二值化,就更好理解了,在Matlab中是以一个二维矩阵进行存储,其值只能是0或者1,即只有黑白两色。
读写图像文件
Matlab支持多种图像文件类型的操作,有BMP、JPG、GIF、ICO、TIF等,通过imread和imwrite来实现读写的操作,imread可以将指定位置的图片以矩阵形式读入工作区内,语法如下:
Image=imread(file,FMT);
file填入图像文件的路径和文件名,只写文件名的话,就代表在当前的工作路径或者系统目录查找对应图像文件;FMT是文件的类型,如:bmp;Image就是存储图像数据的矩阵了,彩图就是三维的,灰度图和二值化图像就是二维矩阵了。
写操作的语法与读的一致,语法如下:
Image=imwrite(file,FMT);
显示图像
使用imshow函数就可以显示工作区内图像数据对应的图像,也可以直接显示指定路径下的图像文件,使用语法为:
imshow(I,[low,high],param1,value1,param2,value2,...)
imshow(flie)
I是需要显示的图像数据矩阵,二维矩阵代表的是灰度图像,三维矩阵则为彩图;[low,high]是灰度图的灰度范围,灰度值比low的值小的会转成黑色显示,大于high的转成白色,在范围内的灰度值,按比例显示灰度级;file指定图像的路径和文件名,与读写的使用一致。
示例
%读取图像,显示图像,按新格式保存图像
Pic=imread('cameraman.tif');%系统自带的一幅图
imshow(Pic);
imwrite(Pic,'cameraman.bmp','bmp');
结果
从结果中的1、2、3,可以看到图像按矩阵形式导入到工作区,然后显示再窗口中,并以新的格式写入当前的运行路径~
图像运算
直方图
图像灰度分布情况的信息对图像处理来说,而直方图就是直观的一个方法,使用 imhist 函数即可显示图片的直方图,直方图表述的是图片灰度级出现的频率,横坐标就是对应的灰度值,纵坐标就是其出现次数。
%语法
imhist(I);
imhist(I,n);
%备注:I是图像矩阵,n是指定的灰度级数目,会按将所有的灰度级均匀分布在这n个区间中,默认值是256.
示例
Pic=imread('cameraman.tif');
figure;
subplot(211);imhist(Pic);
subplot(212);imhist(Pic,50);
结果
可以明显看到,灰度级数目随着n从默认值256变为50而变少了。
直方图均衡
直方图均衡又称灰度均衡,就是指将输入的图像转换成每一灰度级上都有近似相同的像素点的图像,从而使得输出的图像的直方图是均衡的,图像也因此增加了高对比度与大动态范围的效果。
用histeq就可以实现该方法
语法:[j,t]=histeq(I)
I是图像矩阵,j是均衡后的图像数据矩阵,t是变换矩阵
示例
Pic=imread('mandi.tif');
figure;
subplot(221),imshow(Pic);title('原图');
subplot(222),imhist(Pic);title('原图直方图');
[j,t]=histeq(Pic);%均衡处理
subplot(223);imshow(j);title('均衡后的图像');
subplot(224);imhist(j);title('均衡后的图像直方图');
结果
使用了一组一维变换矩阵进行变换