图像分割方法

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。

先放原图:

opencv 热成像相机 怎么提取温度 热成像 算法_opencv 热成像相机 怎么提取温度

opencv 热成像相机 怎么提取温度 热成像 算法_算法_02

opencv 热成像相机 怎么提取温度 热成像 算法_矩阵_03


opencv 热成像相机 怎么提取温度 热成像 算法_算法_04


一、直方图阈值选取分割法

1、其中一种分割方法是利用直方图的分布情况,然后按照一个阈值进行按零处理和按一处理,处理后的灰度图像数据再与原图像的double数据相应的相乘得到一个分割出来的原图像。这里用了几张红外热成像图进行背景和前景分割。分割效果如下:

opencv 热成像相机 怎么提取温度 热成像 算法_算法_05


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_06


opencv 热成像相机 怎么提取温度 热成像 算法_算法_07


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_08


从图中可以看出该方法在分割上已经基本上做到了背景和前景的分离,而且在分割轮廓上也很平滑,图像中的小孔也有分割出来,但是不足的地方在于此种方法的分割具有一定的人为因素,需要由操作者判断直方图中的灰度图的多少来判断应该取哪个阈值,从而得到相应的调取范围,而且由于需要人为的选取阈值范围,这个阈值范围就会有所偏差,如果选取的阈值范围过大,就会导致过分割现象,如果选取的阈值范围过小,就会导致分离不完全含有许多杂质无法用滤波滤除。从此种方法中可以得出图像分割的基本形式,由于分割的目的是明确的,分割出来的图像看似完整,实际与选取参数有很大关系。并且由于需要人工分析直方图以及参数,使得处理总时长增加,此种方法处理简单图片也很快。

2、程序如下

clear;clc
[FileName,FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','请选择图像数据'); 
str=[FilePath FileName]; 
I=imread(str);
B=rgb2gray(I);
figure(1);
imhist(B)
R1=input('R1=');
R2=input('R2=');
R3=input('R3=');
tic
for i = 1:960 
for j = 1:1280 % B 的大小是960*1280
if( B(i,j) < R1&&R2<B(i,j)<R3) ; bw( i,j) = 0; 
else bw( i,j) = 1; 
% B 中小于 71 的为 0,大于 71的为 1 
end 
end 
end 
figure(2);imshow( bw) ; 
% 显示 bw 图像 
I = double( I) ; 
% 将原图 I 进行 double 处理 
for i =1:3 
temp(:,:,i) = I(:,:,i).*bw; 
% 将 I 与 bw 相乘,得到图像 temp 
end 
temp = temp /256; 
figure(3);
imshow( temp) ; % 显示 temp 图像
toc

二、基于颜色YCbCr的区域分割

由于颜色特征是在图像检索中应用最为广泛的视觉特征,主要原因在于颜色往往和图像中所包含的物体或场景十分相关。此外,与其他的视觉特征相比,颜色特征对图像本身的尺寸、方向、视角的依赖性较小,从而具有较高的鲁棒性。

此处的颜色特征为亮度、彩度、浓度,得到相应通道下的数据后根据Otsu方法判断出全局阈值,根据这个阈值得到相应的二值图像,该二值图像已经将背景和前景分离出来,然后将原图像的double处理,然后与得到的二值图像数据逐一相乘得到分割掉背景的前景图。效果图如下:

opencv 热成像相机 怎么提取温度 热成像 算法_算法_09


opencv 热成像相机 怎么提取温度 热成像 算法_算法_10


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_11


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_12


根据得到的效果图,发现该种分割图像的方法虽然可以很大程度自动分割,而且这种分割方式也有一定的鲁棒性,但是由于颜色区域分割中彩度的阈值可能不够精确,以至于出现了过分割现象,如图9、图10就是典型的将热成像图像中的尖端部分分割掉了;另外,由于图11、图12分割出来的图像具有很多不平滑的地方,这种不平滑的地方是一些噪声干扰导致的,但是这应该是属于图片本身的噪声,消除其中的噪声可以利用中值滤波进行滤除。图片的处理时间很短,处理这种简单的图片一般在2秒左右。

程序如下:

[FileName,FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','请选择图像数据'); 
str=[FilePath FileName];
tic
A=imread(str);
ycbcr=rgb2ycbcr(A);
y=ycbcr(:,:,1); %亮度
cb=ycbcr(:,:,2); %彩度
cr=ycbcr(:,:,3); %浓度
 
thr_y=graythresh(y);
bw_y=im2bw(y,thr_y);
figure; 
imshow(bw_y);
 
A= double( A) ; 
% 将原图 A 进行 double 处理 
for i =1:3 
temp(:,:,i) = A(:,:,i).*bw_y; 
% 将 I 与 bw 相乘,得到图像 temp 
end 
temp = temp /256; 
figure(3);
imshow( temp) ; % 显示 temp 图像
toc

三、基于颜色hsv特征的区域分割法
该种方法主要是利用图像的色调、饱和度、明度区分出背景和前景的,根据原图像的数据,将数据进行rgb转hsv,将图像转换后,对数据进行全局阈值处理转化为二值图像,再利用原图像的double数据,将图像背景和ROI区域分割出来,并进行分析,以下是效果图:

opencv 热成像相机 怎么提取温度 热成像 算法_矩阵_13


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_14


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_15


opencv 热成像相机 怎么提取温度 热成像 算法_小程序_16


由效果图得知,该种方法对ROI区域的提取比较用YCbCr特征提取效果更明显,分离出来的图像轮廓更加光滑,分离出来的区域更加完整。由于分离方法的细微差别,该种方法处理时间稍微长一点。

程序如下:

tic
[FileName,FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.gif;','请选择图像数据');
str=[FilePath FileName];
 
A=imread(str);
Untitled(A);
I=rgb2hsv(A);
h=I(:,:,1);
s=I(:,:,2);
v=I(:,:,3);
thr_h=graythresh(h);
bw_h=im2bw(h,thr_h);
bw_h=~bw_h;
figure(2); 
imshow(bw_h);
 
A= double( A) ; 
% 将原图 A 进行 double 处理 
for i =1:3 
temp(:,:,i) = A(:,:,i).*bw_h; 
% 将 A 与 bw 相乘,得到图像 temp 
end 
temp = temp /256; 
figure(3);
imshow( temp) ; % 显示 temp 图像
toc