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

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

相关推荐
张飞飞飞飞飞9 小时前
多模态目标检测-LLVIP数据集处理(清洗+YOLO格式)
人工智能·深度学习·目标检测
大树889 小时前
一滴冷却液,烧掉2000万算力
大数据·运维·服务器·人工智能
醒醒该学习了!9 小时前
人工智能的核心算法基础(理论篇)
人工智能
一切皆是因缘际会9 小时前
量化阈值拆解|2026端侧AI复盘
人工智能·架构·系统架构
圣殿骑士-Khtangc9 小时前
LLM 推理加速全攻略:vLLM、TensorRT-LLM 与量化技术实战
人工智能
meilindehuzi_a9 小时前
全栈进阶:告别 Node 繁琐配置,用下一代运行时 Bun 丝滑构建 AI Agent 客户端
人工智能·llm
龙腾AI白云9 小时前
用知识图谱重构搜索引擎
人工智能·virtualenv·scikit-learn
AI服务老曹9 小时前
解耦异构算力与多协议混战:基于 Docker 容器化的国标 GB28181/RTSP 边缘计算 AI 视频管理平台架构设计与源码交付实践
人工智能·docker·边缘计算
lqqjuly9 小时前
FlashAttention 深度解析
人工智能·深度学习·算法
来让爷抱一个9 小时前
阿里发布Qwen3.7-Plus:连续跑11小时,自主开发了一个App
人工智能