阈值分割是一个常见的图像处理任务,它用于将图像中的像素根据特定条件(如亮度值)分成不同的类别。
- 全局阈值分割、
- 自适应阈值分割、
- Otsu 阈值分割、
- 双阈值分割
一、全局阈值分割
1、核心原理
- 全局阈值分割的核心思想是对每个像素与给定的阈值进行比较:当像素值大于等于阈值时赋予的最大值
2、算法功能
- 全局阈值分割可以将图像中的前景与背景区分开来,通常用于二值化图像,使其更适合于后续的处理步骤。
3、算子参数
Cv2.Threshold(Mat src, Mat dst, double thresh, double maxval, ThresholdTypes type);
- src:输入图像(单通道灰度图像)。
- dst:输出图像(处理后的二值化图像)。
- thresh:全局阈值。
- maxval:大于阈值的像素值设定。
- type:阈值类型,如二值化、Otsu 自动阈值等。
4、使用场景
- 背景与前景具有明显亮度差异的图像。
- 实时视频处理中进行简单的目标检测。
5、使用注意事项
- 阈值选择非常关键,错误的阈值会导致分割效果差。
- 需要确保输入图像为灰度图,彩色图需要先转换为灰度图。
6、优缺点
- 优点:简单、快速。
- 缺点:对光照变化和噪声敏感。
7、运行时间优化方法
- 自适应阈值:对于不同区域使用不同阈值来提高鲁棒性,适应光照变化。
8、示例
using OpenCvSharp;
// 读取图像
Mat src = Cv2.ImRead("image.jpg", ImreadModes.Grayscale);
// 进行全局阈值分割
Mat dst = new Mat();
Cv2.Threshold(src, dst, 127, 255, ThresholdTypes.Binary);
// 显示结果
Cv2.ImShow("Threshold Binary", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
9、结合其他相关算法搭配使用
- 可以与 Cv2.MorphologyEx() 搭配使用进行后处理,如腐蚀、膨胀等操作。
- 与 Cv2.Canny() 边缘检测结合,进行进一步的图像分析。
10、相似或平替算法
- Otsu’s Thresholding:通过自动选择最佳阈值来进行图像分割,尤其适合双峰分布的图像。
二、资料
技能拾荒者《8-OpenCVSharp--常见阈值分割算法使用方法》:
https://blog.csdn.net/weixin_45590420/article/details/143787344