大家好,又见面了,我是你们的朋友全栈君。
基本全局阈值分割步骤如下:
(1)设定参数,并选择一个初始的估计阈值。
(2)用阈值分割图像。将图像分成两部分:是由灰度值大于的像素组成,是由灰度值小于或等于的像素组成。
(3)计算和中所有像素的平均灰度值和,以及新的阈值。
(4)如果,则推出即为最优阈值;否则,将赋值给,并重复步骤(2)~(4),直到获取最优阈值。
其具体实现MATLAB代码如下:
%image_bgt.m
function level =image_bgt(I)
%该函数使用basic global thresholding算法实现二值化
I = im2double(I); %对图像归一化
[M,N] = size(I);
T0 = 0.001; %设置门限
T1 = (max(max(I)) +min(min(I)))/2; %得到初始阈值T1
%定义G1、G2的下标,同时起统计个数的作用
columns1 = 1;
columns2 = 1;
%开始遍历
while 1
for i = 1:M
for j = 1:N
if I(i,j)>T1
G1(columns1) = I(i,j); %得到分组G1
columns1 = columns1 + 1;
else
G2(columns2) = I(i,j); %得到分组G2
columns2 = columns2 + 1;
end
end
end
%计算G1、G2均值
ave1 = mean(G1);
ave2 = mean(G2);
T2 = (ave1 + ave2)/2; %得到新阈值T2
if abs(T2 – T1)<T0 %判断T2是否满足条件
break;
end
T1 = T2;
columns1 = 1;
columns2 = 1;
end
level = T2;
end
%DIP_exp4_2.m
%该m文件调用image_bgt函数对图像进行basic global thresholding算法阈值分割
clc;clear;closeall;
I =imread(‘cameraman.tif’);
level =image_bgt(I); %得到basic global thresholding算法阈值
J = im2bw(I,level); %实现图像二值化,即非黑即白
subplot(121),imshow(I);title(‘原图像’);
subplot(122),imshow(J);title(‘basicglobal thresholding后图像’);
运行DIP_exp4_2.m文件得结果如下:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141908.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...