将彩色图像转化为灰度(rgb->gray)的方法有两种:
一个是令RGB三个分量的数值相等,输出后便可以得到灰度图像;
另一种是转化为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图像的亮度和浓度所以只输出Y分量,得到的图像就是灰度图像了。
MATLAB对于图像处理中有丰富的函数,最简单的RGB转gray只需要一个函数rgb2gray()即可完成。
YCbCr转RGB或RGB转YCbCr都需要满足一个前提条件,就是两者都是在0-255这么范围,是三个通道都要在这个范围。即可以转成uint8再进行ycbcr2rgb或rgb2ycbcr操作。
注意:
Matlab中读取图片后保存的数据是uint8类型(取值范围0~255),但在图像矩阵运算的时候,使用的数据类型却是double类型。若使用uint8类型的数据进行矩阵运算,一旦数据超出255就会溢出。
解决方法:
- 将读入的图像数据转化为double类型 ,转换结果取值I位于[0,255]。【推荐】
- 使用im2double() 进行转换,转换结果取值I位于[0,1]。
此时,图像处理完成后,要使用im2uint8()或uint8(round(I*255)) 将图像数据的灰度值范围变回[0,255]。 - 将读入的图像数据转化为uint16类型,转换结果取值I位于[0,255]。
使用double类型的好处有以下两点:
①部分函数只支持double类型。
②保证图像数据运算的精度,防止数据溢出。
MATLAB在图像处理中常用语法和函数:
清空和关闭命令
clc 清空命令区域
clear 清空工作区
clear all 清空工作区与全局变量
close 关闭当前窗口
close all 关闭所有窗口
这几条命令一般写在代码的开头,用来清空或关闭之前操作残留的窗口和命令。
合成和提取RGB的三个分量
fR、fG、fB分别表示RGB三个分量的图像。一副RGB图像可以利用cat(级联)操作符合成彩色图像。
rgb_image = cat(3, fR, fG, fB)
提取三个分量:
fR = RGB(:, :, 1); 红色分量
fG = RGB(:, :, 2); 绿色分量
fB = RGB(:, :, 3); 蓝色分量
size()函数得到图片的行列数
[ROW, COL,DIM] = size(R_data); 得到一副图像的行列数。
size(X,1) 得到矩阵X的行数 ;size(X,2) 得到矩阵X的列数 ;size(X,3) 得到矩阵X的第三维的值,如果是图像则为其通道数
显示图片
figure, imshow(imag) 保存第一幅图像并同时显示第二幅图像。
显示图片用imshow()函数,前面加个figure; 可以在原来显示的基础上重新打开一个窗口显示。
生成矩阵函数
zeros函数——生成零矩阵
ones函数——生成全1阵
【zeros的使用方法】
B=zeros(n):生成n×n全零阵。
B=zeros(m,n):生成m×n全零阵。
B=zeros([m n]):生成m×n全零阵。
B=zeros(d1,d2,d3……):生成d1×d2×d3×……全零阵或数组。
B=zeros([d1 d2 d3……]):生成d1×d2×d3×……全零阵或数组。
B=zeros(size(A)):生成与矩阵A相同大小的全零阵。
【ones的使用方法】ones的使用方法与zeros的使用方法类似