MATLAB小技巧(5)kittler二值化分割算法

本文介绍了MATLAB中进行图像处理的一种常用技术——Kittler二值化分割算法。该算法基于最小误差法,适用于灰度图像的阈值分割,通过计算目标和背景的均值、方差,找到最小分类误差的阈值,从而实现最佳的图像二值化。文章包含了MATLAB仿真实现和仿真结果的展示。
摘要由CSDN通过智能技术生成

MATLAB小技巧(5)kittler二值化分割算法

前言

MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有了封装好的许多可直接调用的函数,这个系列文章的话主要就是介绍一些大家在MATLAB中常用一些概念函数进行例程演示!

最小误差法是KITTLER1984年在MINIMUM ERROR THRESHOLDING文章中提出的一种基于直方图的阈值分割方法,简称KITTLER算法。其思想:假设灰度图像由目标和背景组成,且目标和背景满足一混合高斯分布,计算目标和背景的均值、方差,根据最小分类误差思想得到的最小误差目标函数,取目标函数最小时的阈值即为最佳阈值。按此阈值将图像分割为二值图像。

一. MATLAB仿真

clc;clear;close;


[filename,pathname]=uigetfile('*.jpg;*.png;*.bmp','select the file'); 
im=[pathname,filename]; 
A = imread(im);
imagBW = kittlerMet(A); 
figure(1),imshow(A),title('原图');
figure(2),imshow(imagBW),title('KITTLERMET阈值二值化分割图');


function imagBW = kittlerMet(imag) 
% KITTLERMET binarizes a gray scale image 'imag' into a binary image 
% Input: 
%   imag: the gray scale image, with black foreground(0), and white 
%   background(255). 
% Output: 
%   imagBW: the binary image of the gray scale image 'imag', with kittler's 
%   minimum error thresholding algorithm. 
 
% Reference: 
%   J. Kittler and J. Illingworth. Minimum Error Thresholding. Pattern 
%   Recognition. 1986. 19(1):41-47 
 
MAXD = 100000; 
imag = imag(:,:,1); 
[counts, x] = imhist(imag);  % counts are the histogram. x is the intensity level. 
GradeI = length(x);   % the resolusion of the intensity. i.e. 256 for uint8. 
J_t = zeros(GradeI, 1);  % criterion function 
prob = counts ./ sum(counts);  % Probability distribution 
meanT = x' * prob;  % Total mean level of the picture 
% Initialization 
w0 = prob(1);   % Probability of the first class 
miuK = 0;   % First-order cumulative moments of the histogram up to the kth level. 
J_t(1) = MAXD;  
n = GradeI-1; 
for i = 1 : n 
    w0 = w0 + prob(i+1); 
    miuK = miuK + i * prob(i+1);  % first-order cumulative moment 
    if (w0 == 0) || (w0 == 1) 
        J_t(i+1) = MAXD;    % T = i 
    else 
        miu1 = miuK / w0; 
        miu2 = (meanT-miuK) / (1-w0); 
        var1 = (((0 : i)'-miu1).^2)' * prob(1 : i+1); 
        var1 = var1 / w0;  % variance 
        var2 = (((i+1 : n)'-miu2).^2)' * prob(i+2 : n+1); 
        var2 = var2 / (1-w0); 
        if var1 > 0 && var2 > 0   % in case of var1=0 or var2 =0 
            J_t(i+1) = 1+w0 * log(var1)+(1-w0) * log(var2)-2*w0*log(w0)-2*(1-w0)*log(1-w0); 
        else 
            J_t(i+1) = MAXD; 
        end 
    end 
end 
minJ = min(J_t); 
index = find(J_t == minJ); 
th = mean(index); 
th = (th-1)/n 
imagBW = im2bw(imag, th); 
 
% figure, imshow(imagBW), title('kittler binary'); 
end

二. 仿真结果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三. 小结

二值化分割是图像处理中最基础的变换,主要核心就在于找到一个最优阈值对图像进行分割,从而实现背景与前景的分割。图像二值化的经典算法,全局阈值法如大津法、kittler法;局部阈值法如niblack法等均已介绍仿真完毕。每天学一个MATLAB小知识,大家一起来学习进步阿!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mozun2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值