本文主要记录利用MATLAB图像处理的学习笔记。
1.图像处理的流程:
导入影像,预处理,影像分割,后处理,分类。
2.如果导入图像是彩色图像,计算影像size:
size包括图像的行数、列数和第三个维度用来存储RGB,即:
可以通过索引到第三维访问图像的单个颜色平面,如1作为第三个索引来提取红色,2提取绿色,3提取蓝色。
Ig = I(:,:,1); %红
Ig = I(:,:,2);%绿
Ig = I(:,:,3);%蓝
3.大多数图像使用无符号8位整数(uint8)数据类型,它存储从0到255的整数。
利用max函数查找所有元素的最大值:
M = max(A,[],'all') %找出A中所有元素的最大值。
4.imsplit()函数:将多通道图像分割成单独的通道.
用法:[c1,c2,c3,…,ck] = imsplit(I)
返回k个图像的集合,代表k通道图像I中的单个通道。
5.为什么RGB影像要转换成灰度影像
(1)当载入内存时,灰度图像占RGB图像所需空间的三分之一。
(2)由于灰度图像具有三分之一的数据,它需要更少的计算能力,可以减少计算时间。
(3)灰度图像在概念上比RGB图像简单,因此在处理灰度图像时,开发图像处理算法可以更直接。
RGB planes:Height * Width * 3(多一维度用于存储RGB信息)
Grayscale:Height * Width
6.利用im2gray()函数将彩色影像RGB转换成灰度影像Grayscale。
Ags = im2gray(A)
由im2gray创建的灰度图像是一个由强度值组成的单一平面。im2gray函数将RGB值转换为灰度值,将R、G、B分量加权和:
7.Contrast and Intensity Histograms 对比度和直方图
强度直方图根据像素的强度值将其分离到多个容器中。例如,深色图像在直方图的低端有许多像素。明亮区域的像素被收纳在直方图的高端。
imhist(A) 生成直方图;
imadjust(A)可以调整图像,增强对比度;imadjust函数一般只对灰度影像有效,除非引入其他参数。
imlocalbrighten():增强low-light影像,效果如下图:
【注】:图片来自MATLAB帮助文档
8.小结:
imread 读入影像
imshow 显示影像
size 计算影像大小
imhist 绘制影像直方图(灰度)
imadjust 调整灰度影像的亮度或彩色影像的颜色矩阵。
9.Image Viewer app 影像预处理工具
使用方法:
(1)输入imtool;
(2)下载Image Processing Toolbox;
(3)在APP菜单栏搜索 Image Viewer;
可以打开影像,查看像元属性信息、调整对比度等。
10.影像分割Segmenting
影像分割:将一幅图像分割成不同的部分称为图像分割。
(1)使用逻辑运算符为影像定义阈值+直方图
强度阈值(Intensity Thresholding):通过设置阈值,将目标类设为1,背景设为0.
设置阈值代码:
img1 = imread("IMG_004.jpg"); %导入影像
gs1 = im2gray(img1); %转换成灰度影像
gsAdj1 = imadjust(gs1); %对灰度影像进行亮度处理
imhist(gsAdj1) %绘制直方图,通过直方图进行阈值判断
BW1 = gsAdj1 >175; %设置阈值
imshowpair(img1,BW1,'montage') %显示图像
(2)自动选择阈值
利用imbinarize 函数可以自动选择阈值。
用法:
BW= imbinarize(I);%默认情况下,imbinized使用一个全局阈值-图像中的每个像素都使用相同的阈值。
BW = imbinarize(I,method) %creates a binary image from image I using the thresholding method specified by method: 'global' or 'adaptive'.
一般自选的阈值比通过直方图手动选取的阈值效果要差。
imbinarize函数还有一种用法,可以通过设置参数,调整前景与后景的亮度。一般默认情况下,影像的前景是亮的(bright),背景是暗的(dark)。
BW = imbinarize(I,'adaptive',Name,Value);
BW = imbinarize(I,'adaptive',"ForegroundPolarity","dark");%设置前景是暗的
11. sum函数
sum函数用于计算数组元素的总和。
用法:
S = sum(A,dim)
S = sum(A,dim)返回沿dim维度的和。例如,如果A是一个矩阵,那么sum(A,2)是一个列向量,包含每一行的和;sum(A,1)是一个行向量,包含每一列的和。
12. plot函数
用法1:
plot(Y)%创建Y中的数据与每个值的索引的二维线图。
如果Y是一个向量,那么x轴缩放范围从1到长度(Y)。
如果Y是一个矩阵,那么plot函数画出Y的列与行号的关系。x轴的刻度范围从1到Y的行数。
如果Y是复数,那么plot函数将绘制Y的虚部与Y的实部,这样plot(Y)等价于plot(real(Y),imag(Y))。
13.提高分割精度
可以通过两种方式来改进分割:在二值化前对图像进行预处理,以及对二值化图像本身进行后处理。主要技术包括:去噪处理、背景隔离和减法、二值形态学。
(1)去噪处理:Noise Removal
- 平滑像素强度值,以减少变化对二值化的影响。
(2)背景隔离和减法:Background Isolation and Subtraction
- 在二值化之前隔离并去除图像的背景。
(3)二值形态学:Binary Morphology
- 在二值图像中强调特定的模式或形状。
14.spatial filter空间滤波
利用滤波器对影像进行平滑处理,滤波器filter是一个矩阵(类似mask)。在影像中放入一个filter时,会创建一个window。
线性滤波:
线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,如均值滤波器、高斯滤波器等。
非线性滤波:
非线性滤波器的原始数据与滤波结果是一种逻辑关系,也就是用逻辑运算来实现的,比如最大值滤波器、最小值滤波器、中值滤波器等,是通过比较一定邻域内的灰度值大小来实现的。
- fspecial函数用于创建滤波器
用法:
h = fspecial("average",n) %创建n*n的平均滤波器
16.imfilter函数
对影像进行滤波处理:
B = imfilter(A,h)