C#:常见阈值分割算法(全局阈值分割)

阈值分割是一个常见的图像处理任务,它用于将图像中的像素根据特定条件(如亮度值)分成不同的类别。

  • 全局阈值分割、
  • 自适应阈值分割、
  • 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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 此系列的其他文章:OpenCV算法学习笔记之初识OpenCVOpenCV算法学习笔记之几何变换OpenCV算法学习...
    Aengus_Sun阅读 5,227评论 0 5
  • 阈值处理 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰...
    陨星落云阅读 921评论 0 2
  • 在很多时候,我们想要一种处理方式:设定一个值,低于这个值的像素全都变为0,高于这个值的像素全都设置为255, 这...
    我们学不来阅读 907评论 0 1
  • 6.1、方法概述 阈值分割的核心就是如何选取阈值, 选取正确的阈值是分割成功的关键。 1、全局阈值分割 全局阈值分...
    肉松饼饼阅读 3,752评论 0 1
  • OpenCV提供了两个函数cv2.threshold() 和 cv2.adaptiveThreshold(),用于...
    长歌行夜一阅读 1,858评论 0 1