clc;
clear all;
close all;
%%
%============Variable Thresholding Based on Local Image Properties=========
%基于局部图像属性的变门限
I=im2double(imread('D:\Gray Files\10-43.tif'));
[M,N]=size(I);
%求取局部标准差n*n
n=3;
n_l=floor(n/2);
%对原图进行扩展,方便处理边界
I_pad=padarray(I,[n_l,n_l],'symmetric');
g_std=zeros(M,N);
%求局部图像的标准差
for i=1:M
for j=1:N
Block=I_pad(i:i+2*n_l,j:j+2*n_l);
g_std(i,j)=std(Block(:));
end
end
% %显示方差效果
% g_std=g_std/max(g_std(:));
% imshow(g_std)
%计算全局平均值
I_mean=mean(I(:));
%系数
a=30;
b=1.5;
%结果图像
Q=zeros(M,N);
%利用图像的局部属性分割图像
for i=1:M
for j=1:N
if I(i,j)>a*g_std(i,j) && I(i,j)>b*I_mean
Q(i,j)=1;
end
end
end
imshow(Q)