1、图像阈值定义
利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取一个比较合理的阈值,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生相应的二值图像。(百度百科定义)。
简单来说,图像阈值就是选择一个或多个合适的值,结合图像的像素灰度值将像素分为两类(目标和背景)。简单单阈值C++(结合opencv)代码及案例如下所示:
代码
#include<opencv2/opencv.hpp>
#include<iostream>
void main()
{
cv::Mat src = cv::imread("test7.bmp",-1);//读图
int thresholdVal = 130;//阈值
//图像阈值分割
cv::Mat thresholdImage(src.size(),CV_8UC1,cv::Scalar(0));
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
if (src.at<uchar>(i, j) > thresholdVal)
thresholdImage.at<uchar>(i, j) = 255;
}
}
cv::waitKey();
}
单阈值案例:
从上面单阈值效果来看,不同的阈值有不同的目标提取效果,阈值在选择时需要根据目标的灰度特征以及背景的灰度情况确定。
2、阈值方法
(1)固定阈值
设定一个数值,利用此值将图像像素灰度值分为两类,其效果如图一中所示。
(2)自适应阈值
根据算法计算出一个阈值,利用此阈值将图像像素分为目标和背景。如图2所示,自适应阈值是通过算法找到一个波谷值或一个合适的值(如图2中红线),将像素分为两类。算法主要有:OTSU阈值、迭代阈值、最大熵阈值。
(3)聚类分割
这类方法的主要核心是利用聚类算法将图像灰度分为多个类,每个类都有一个灰度范围(如图3所示),根据目标灰度特征选则合适的类,选择其对应类的灰度范围,将图像像素分为两类。典型算法例如EM聚类分割算法。
3、阈值类型
(1)阈值二值化
表达式为:
(2)阈值反二值化
表达式为:
(3)截断
表达式为:
(4)阈值取零
表达式为:
(5)阈值反取零
表达式为: