直方图法、最大类间方差法、迭代法和自适应阈值法的图像分割的基本原理和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个峰两个波谷,使用单一阈值分割效果不理想,而使用自适应阈值(局部阈值)分割效果较好,为后续大米特征提取提供了有力支持。全局阈值(直方图法、最大类间方差法、迭代法)适合前景(或目标)和背景具有显著的对比度(最好接近于定值),具有典型的双峰特性时的分割效果较好,而对于多峰特性的图像分割效果不好。

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

相关推荐
程序员老猫35 分钟前
vide coding 个人产品,那就从博客开始吧
人工智能·程序员·全栈
geo搜搜果数据1 小时前
实测5大AI平台品牌排名:复现GEO监测流程
人工智能·langchain·搜搜果
minge00012 小时前
【世界杯中的AI】(2026-07-05)当足球遇见AI:7月5日世界杯的“人机共舞”与冷门之夜
人工智能·科技·世界杯
IT_陈寒2 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
wumingxiaoyao2 小时前
从 0 开始学 AI:第 2 课,AI、机器学习、深度学习和大模型是什么关系?
人工智能·深度学习·机器学习·ai·大模型·llm
2601_962683892 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
踩着两条虫2 小时前
可视化 vs 终端 vs 云端:VTJ.PRO、Claude Code、Codex 三强横评
前端·vue.js·人工智能·低代码·架构
字节跳动视频云技术团队2 小时前
Agentic 范式下的视频画质优化:火山引擎的新路径
人工智能·音视频开发
东方佑3 小时前
临界分词的存在性与最优性:从统计临界态到神经语言模型的双语实证检验
人工智能·算法·语言模型