直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和MATLAB实现

一、常用的四种图像阈值分割方法的基本原理

  1. 直方图法(Histogram-based Thresholding)
  • 核心原理 :基于图像灰度直方图的分布情况,假设目标与背景灰度值明显区分(直方图呈现双峰),选取两峰之间的谷底灰度作为分割阈值,将图像二值化为目标与背景。
  • 适用场景:目标(或前景)与背景灰度差异显著、直方图分布清晰并具有典型的双峰特性的图像。
  1. 最大类间方差法(Otsu's Method)
  • 优势:自动计算阈值,抗噪声能力较强,是最常用的全局阈值法之一。
  1. 迭代法(Iterative Thresholding)
  • 适用场景:无明显双峰直方图、需动态优化阈值的场景。
  1. 自适应阈值法(Adaptive Thresholding)
  • 适用场景:光照不均匀、背景复杂的图像(如本图 rice.png,米粒与背景灰度分布有局部差异)。

二、四种阈值分割方法的MATLAB实现

  • %% 基于四种阈值法的rice.png图像分割

    % 清空工作区、命令行,关闭窗口

    clear; clc; close all;

    % 1. 读取图像(MATLAB自带rice.png)

    I = imread('rice.png');

    imshow(I),title('原始图像 (rice.png)');

    %% 2. 直方图法分割(全局阈值,取直方图的两个波谷)

    figure,imhist(I);

    I_hist1=im2bw(I,150/255);

    figure,imshow(I_hist1),title('直方图法分割1');

    I_hist2=im2bw(I,75/255);

    figure,imshow(I_hist2),title('直方图法分割2');

    %% 3. 最大类间方差法(Otsu)- MATLAB内置最优全局阈值

    T_otsu = graythresh(I); % 自动计算Otsu阈值

    I_otsu = im2bw(I, T_otsu);%BW = imbinarize(I) 等价于BW=im2bw(I,graythresh(I))

    figure,imshow(I_otsu),title('最大类间方差法分割');

    %% 4. 迭代法分割(迭代收敛最优阈值)

    T_iter = mean2(double(I)); % 初始化阈值:图像平均灰度

    while true

    % 按当前阈值分割前景/背景

    bg = I <= T_iter;

    fg = I > T_iter;

    % 计算两类平均灰度

    mu_bg = mean(I(bg));

    mu_fg = mean(I(fg));

    % 更新阈值

    T_new = (mu_bg + mu_fg)/2;

    % 收敛判断:阈值变化小于1时停止

    if abs(T_new - T_iter) < 1

    break;

    end

    T_iter = T_new;

    end

    I_iter = imbinarize(I, T_iter/255);

    figure,imshow(I_iter),title('迭代法分割');

    %% 5. 自适应阈值法(局部阈值,解决光照不均)

    % 自适应二值化:15×15邻域,前景为亮区域(米粒),补偿值20

    %I_adapt = imbinarize(I, 'adaptive', 'NeighborhoodSize',15,'ForegroundPolarity', 'bright','ContrastEnhancement', 0.02);

    %I_adapt = imbinarize(I, 'adaptive');

    I_adapt = imbinarize(I, 'adaptive');

    figure,imshow(I_adapt);

    title('自适应阈值法分割');

    figure,

    subplot(2,4,1),imshow(I),title('原始rice.png');

    subplot(2,4,2),imhist(I),title('灰度直方图');

    subplot(2,4,3),imshow(I_hist1),title('使用波谷1的阈值150进行分割');

    subplot(2,4,4),imshow(I_hist2),title('使用波谷2的阈值75进行分割');

    subplot(2,4,5),imshow(I_otsu),title('使用最大类间方差法进行分割');

    subplot(2,4,6),imshow(I_iter),title('使用迭代法进行分割');

    subplot(2,4,7),imshow(I_adapt),title('使用局部阈值法进行分割');

三、主要运行结果和分析

  • 从上面运行结果可以看出,由于rice.png图像的光照不均匀,具有3个峰两个波谷,使用单一阈值分割效果不理想,而使用自适应阈值(局部阈值)分割效果较好,为后续大米特征提取提供了有力支持。全局阈值(直方图法、最大类间方差法、迭代法)适合前景(或目标)和背景具有显著的对比度(最好接近于定值),具有典型的双峰特性时的分割效果较好,而对于多峰特性的图像分割效果不好。

撰写博客不易,如果大家觉得本文对大家学习有所帮助,请点赞、关注,欢迎转发!

相关推荐
小小仙子39 分钟前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
IT_陈寒1 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱1 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端
Infedium1 小时前
英特物理AI仿真赋能制造!打破传统有限元瓶颈,研发提效降本翻倍
人工智能·制造
天国梦1 小时前
2026英语教学系统选型实战:AI如何让备课效率提升42%?天学网技术落地全解析
人工智能·学习
hqyjzsb2 小时前
AI证书和传统证书有什么区别?
人工智能·金融·数据挖掘·数据分析·aigc·创业创新·学习方法
阿里云大数据AI技术2 小时前
阿里云 Elasticsearch 9.4 Agent Builder 实战
人工智能·elasticsearch·agent
用户7783366132112 小时前
serpbase + Cloudflare R2 边缘持久化实战
前端·人工智能
东方小月2 小时前
从零开发一个 Coding Agent(三):EventStream 事件流通道设计与实现
前端·人工智能·后端
中微极客2 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法