图像Ostu二值化原理及matlab实现代码

Ostu假设图像是由前景区域和背景区域两部分组成的,通过遍历计算不同阈值(通常为[0 255]区间范围内)下分割结果中前景区域和背景区域的灰度直方图,然后比较两者之间的方差,使得方差最大化的那个灰度阈值即为所求二值化阈值。

matlab程序如下所示:​

close all;

clear all;

clc;

G = imread('D:\test.bmp');

figure;

imshow(G);

title('原图');

%I = rgb2gray(G);

I=G;

[m,n] = size(I);

Hist = zeros(256);%直方图

dHist = zeros(256);%各像素值所占比例

variance = zeros(256);%方差

PXD = 0;%阈值初始化

for i = 1:m

    for j = 1:n

        Hist(uint8(I(i,j))+1) = Hist(uint8(I(i,j))+1) + 1;%由于matlab矩阵下标最小为1,所以这里稍微变换一下取下标为uint8(I(i,j))+1代表灰度值uint8(I(i,j))对应的直方图下标

    end

end

for i = 1:256

    dHist(i) = Hist(i)/(m*n);

end

for PXD = 1:256

    w0 = 0;

    w1 = 0;

    g0 

你可能感兴趣的:(图像处理)