阈值分割法——最佳阈值的选择问题

    阈值分割法可以说是图像分割中的经典方法,它利用图像中要提取的目标与背景在灰度上的差异,通过设置阈值来把像素级分成若干类,从而实现目标与背景的分离。

    一般流程:通过判断图像中每一个像素点的特征属性是否满足阈值的要求,来确定图像中的该像素点是属于目标区域还是背景区域,从而将一幅灰度图像转换成二值图像。

用数学表达式来表示,则可设原始图像f(x,y),T为阈值,分割图像时则满足下式:

                                                                     

    阈值分割法计算简单,而且总能用封闭且连通的边界定义不交叠的区域,对目标与背景有较强对比的图像可以得到较好的分割效果。但是,关键问题来了,如何获得一个最优阈值呢?????

以下是几种最优阈值的选择方法:

(1)人工经验选择法:

    也就是我们自己根据需要处理的图像的先验知识,对图像中的目标与背景进行分析。通过对像素的判断,图像的分析,选择出阈值值所在的区间,并通过实验进行对比,最后选择出比较好的阈值。这种方法虽然能用,但是效率较低且不能实现自动的阈值选取。对于样本图片较少时,可以选用。

(2)利用直方图

    利用直方图进行分析,并根据直方图的波峰和波谷之间的关系,选择出一个较好的阈值。这样方法,准确性较高,但是只对于存在一个目标和一个背景的,且两者对比明显的图像,且直方图是双峰的那种最有价值。

(3)最大类间方差法(OTSU)

    OTSU是一种使用最大类间方差的自动确定阈值的方法。是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,在OTSU算法中所采用的衡量差别的标准就是较为常见的最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大,当部分目标被错分为背景或部分背景被错分为目标,都会导致两部分差别变小,当所取阈值的分割使类间方差最大时就意味着错分概率最小。

 

    记T为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1,图像的总平均灰度为u,前景和背景图象的方差g,则有:

                                              

 

联立上式得:

                                                             

或:

                                                                       

 

        当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。类间方差法对噪声以及目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。当目标与背景的大小比例悬殊时(例如受光照不均、反光或背景复杂等因素影响),类间方差准则函数可能呈现双峰或多峰,此时效果不好。

(4)自适应阈值法:

    上面的最大类间方差阈值分割法在分割过程中对图像上的每个像素都使用了相等的阈值。但在实际情况中,当照明不均匀、有突发噪声或者背景变化较大时,整幅图像分割时将没有合适的单一阈值,如果仍采用单一的阈值去处理每一个像素,可能会将目标和背景区域错误划分。而自适应阈值分割的思想,将图像中每个像素设置可能不一样的阈值。

基本原理:

    一种较为简单的自适应阈值选取方法是对每个像素确定以其自身为中心的一个领域窗口,寻找窗口内像素的最大值与最小值,并取二者的平均值作为阈值,或者将窗口内所有像素的平均值作为阈值,亦或者将窗口内的所有像素的高斯卷积作为阈值。

 

。你发大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。类间方差法对噪声以及目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。当目标与背景的大小比例悬殊时(例如受光照不均、反光或背景复杂等因素影响),类间方差准则函数可能呈现双峰或多峰,此时效果)自适应阈值法

### MATLAB 中 HSV 颜色空间图像分割方法 #### 转换至 HSV 空间 为了在MATLAB中执行HSV颜色空间下的图像分割,首先需要加载一幅彩色图片并将其色彩模式由默认的RGB转换成HSV。此操作利用了`rgb2hsv()`函数来完成变换过程[^4]。 ```matlab % 加载原始彩色图像 image_rgb = imread('example.jpg'); % 显示原图 figure; imshow(image_rgb); title('Original Image'); % RGB to HSV conversion image_hsv = rgb2hsv(image_rgb); % 展示各通道信息 figure; subplot(1,3,1), imshow(image_hsv(:,:,1)), title('Hue Channel'); subplot(1,3,2), imshow(image_hsv(:,:,2)), title('Saturation Channel'); subplot(1,3,3), imshow(image_hsv(:,:,3)), title('Value Channel'); ``` #### 设定阈值范围 接着定义目标对象的颜色区间,在HSV空间内选取合适的阈值用于区分前景与背景。通常情况下,可以根据具体应用场景调整这些参数直到获得满意的效果为止[^5]。 ```matlab % 设置HSV阈值上下限 lower_bound = [0.08, 0.6, 0]; % H S V 下界 upper_bound = [0.15, 1, 1]; % H S V 上界 mask = (image_hsv(:,:,1)>lower_bound(1)) & ... (image_hsv(:,:,1)<upper_bound(1)) &... (image_hsv(:,:,2)>lower_bound(2)) & ... (image_hsv(:,:,2)<upper_bound(2)) &... (image_hsv(:,:,3)>lower_bound(3)) & ... (image_hsv(:,:,3)<upper_bound(3)); % 可视化掩膜结果 figure; imshow(mask); title('Segmentation Mask'); ``` #### 应用掩模提取感兴趣区域 最后一步就是应用之前创建好的二值掩码(`mask`)去筛选出感兴趣的物体部分,并显示最终的结果图像[^3]。 ```matlab % 使用逻辑索引获取ROI segmented_img = zeros(size(image_rgb)); for i=1:3 segmented_img(:,:,i) = image_rgb(:,:,i).*uint8(mask); end % 输出分割后的图像 figure; imshow(segmented_img); title('Segmented Object'); ``` 上述流程展示了完整的基于MATLAB平台下采用HSV颜色模型来进行图像分割的技术路线。通过适当调节不同阶段设置的具体数值可以适应更多类型的视觉任务需求[^1]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值