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

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

相关推荐
一点一木8 小时前
🚀 2026 年 4 月 GitHub 十大热门项目排行榜 🔥
人工智能·github
淡海水10 小时前
【AI模型】常见问题与解决方案
人工智能·深度学习·机器学习
HIT_Weston10 小时前
65、【Agent】【OpenCode】用户对话提示词(费米估算)
人工智能·agent·opencode
njsgcs10 小时前
我的知识是以图片保存的,我的任务状态可能也与图片有关,我把100张知识图片丢给vlm实时分析吗
人工智能
星爷AG I10 小时前
20-4 长时工作记忆(AGI基础理论)
人工智能·agi
#卢松松#10 小时前
用秒悟(meoo)制作了一个GEO查询小工具。
人工智能·创业创新
zandy101111 小时前
Agentic BI 架构实战:当AI Agent接管数据建模、指标计算与可视化全链路
人工智能·架构
数字供应链安全产品选型11 小时前
关键领域清单+SBOM:834号令下软件供应链的“精准治理“逻辑与技术落地路径
人工智能·安全
Flying pigs~~11 小时前
RAG智慧问答项目
数据库·人工智能·缓存·微调·知识库·rag
zuozewei11 小时前
从线下到等保二级生产平台:一次公有云新型电力系统 AI 部署复盘
人工智能