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

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

相关推荐
sali-tec4 分钟前
C# 基于OpenCv的视觉工作流-章103-空车位识别
人工智能·opencv·计算机视觉
迷迭香yy9 分钟前
大宗交易折溢价因子怎么挖掘本地化Python全流程实战
开发语言·人工智能·python
也非非也10 分钟前
DeepSeek 又开源了一个新东西——DeepSeek Harness
人工智能·开源·agi·deepseek·harness·dsh
海兰16 分钟前
【AI工具】腾讯云开源自研 AI 助手 Octop介绍及安装使用指南
人工智能·云计算·腾讯云
Yweir18 分钟前
AI大模型开发-Python介绍、版本说明
开发语言·人工智能·python
Henry-SAP8 小时前
SAP引领ERP智能化转型
人工智能·云原生·sap·erp
峥嵘life8 小时前
Android16 311Y3 EAP-TLS 网络连接失败分析与修复总结
android·开发语言·人工智能·php
特立独行的猫a9 小时前
一切皆插件:DeepSeek Harness 的架构哲学,以及与主流 Agent 的对比
人工智能·架构·agent·deepseek·harness
电商API_180079052479 小时前
京东商品详情API技术文章
大数据·运维·人工智能·网络爬虫
fīɡЙtīиɡ ℡9 小时前
AI Agent 记忆系统
人工智能