matlab图像处理的基本操作

图像范例

本教程处理的范例图像为下图,可右键另存为图片放到你自己的电脑上,保存名字为lena.jpg。


读取图像并显示

新建m文件:打开Matlab-->点file-->new-->script

把新建的m文件和上述图像lena.jpg放在一个文件夹内

在m文件中写入下面代码并运行

I=imread('lena.jpg'); %image read 命令,表示读取图像,生成一个M*N*3的矩阵
subplot(2,2,1);%把整个画面分成2×2 两行两列,总共4块,第三个参数1表示,将显示在第一个子画布。
imshow(I); %image show命令,表示显示图像。
title('原图像');%给上面的图加个标题

运行结果应该是显示这个图像,在最左上角

如果是彩色图像的话,上面的I矩阵应该是个3维矩阵,而且第三个维度固定为3,比如 矩阵大小是800*600*3,前两个数表示图像800行*600列,最后的数字3表示有红绿蓝(RGB)三个维度。


图像灰度化

灰度化就是把在上面代码的后面继续加入如下代码

I_gray = rgb2gray(I);%rgb表示红red,绿green,蓝blue三色,2谐音为to,gray灰度,整体表示 红绿蓝彩色 转变为 灰色
subplot(2,2,2);imshow(I_gray);title('灰度后的图像');

灰度化实际就是把三维矩阵降为二维矩阵的过程,比如800*600*3大小的矩阵变为了800*600。

rgb2gray(I)函数实质根据RGB三个图像对人眼的刺激大小,做了一个加权运算。

我们不一定非要使用rgb2gray(I)函数来完成降维过程。比如我们只关心红色分量,我们可以直接取红色分量作为灰度化的结果,比如:

I_gray = I(:,:,1); %前两个参数只有一个":",表示取所有的行,所有的列,第三个参数表示取第一个分量(红色分量)

图像二值化

在上面代码的后面继续加入如下代码

I_bw = I_gray>150;
subplot(2,2,3);imshow(I_bw);title('二值化后的图像');

二值化的目的是把目标和背景区分开来。


最终的代码

I=imread('lena.jpg'); %image read 命令,表示读取图像,生成一个M*N*3的矩阵
subplot(2,2,1);%这句话的意思是把整个画面分成2×2 两行两列,总共4块,第三个参数1表示,将显示在第一个子画布。
imshow(I); %image show命令,表示显示图像。
title('原图像');%给上面的图加个标题
I_gray = rgb2gray(I);%rgb表示红red,绿green,蓝blue三色,2谐音为to,gray灰度,整体表示 红绿蓝彩色 转变为 灰色
subplot(2,2,2);imshow(I_gray);title('灰度后的图像');
I_bw = I_gray>150;
subplot(2,2,3);imshow(I_bw);title('二值化后的图像');

图像的识别

最简单的识别方式就是图像对比。比如识别字母时,首先把所有的26个字母预先做成图片,保存到固定位置,并以字母名命名。比如字母y的图片命名为y.jpg

然后用目标图片矩阵和库里所有的26个图片对比(比如相减求模),结果最接近0的那个字母图片的文件名就认为是目标图片所对应的字母。

这个过程需要注意图片像素要求大小一样。而且为了图片能够对齐,其四周不应该有"白边"。

============================找指导老师布置任务吧==============================