matlab灰度图轮廓提取

要源代码,很急,再现等
2025-06-23 00:34:44
推荐回答(1个)
回答1:

下面这个是自己写的,先获取阈值再灰度化,对应标准OSTU的流程
filename=' 填入你的图片名'
I=imread(filename);
I_gray=rgb2gray(I);
I_double=double(I_gray);%转化为双精度
[wid,len]=size(I_gray);
colorlevel=256; %灰度级
hist=zeros(colorlevel,1);%直方图

%计算直方图
for i=1:height
for j=1:width
m=I_gray(i,j)+1;
hist(m)=hist(m)+1;
end
end
hist=hist/(height*width);%直方图归一化
miuT=0;
for m=1:colorlevel
miuT=miuT+(m-1)*hist(m);
end
xigmaB2=0;

for mindex=1:colorlevel
threshold=mindex-1;
omega1=0;
omega2=0;
for m=1:threshold-1
omega1=omega1+hist(m);
end
omega2=1-omega1;
miu1=0;
miu2=0;

for m=1:colorlevel
if m miu1=miu1+(m-1)*hist(m);
else
miu2=miu2+(m-1)*hist(m);
end

end
miu1=miu1/omega1;
miu2=miu2/omega2;
xigmaB21=omega1*(miu1-miuT)^2+omega2*(miu2-miuT)^2;
xigma(mindex)=xigmaB21;
if xigmaB21>xigmaB2
finalT=threshold;
xigmaB2=xigmaB21;
end
end
threshT=finalT;

for i=1:height
for j=1:width
if I_double(i,j)>finalT
bin(i,j)=1;
else
bin(i,j)=0;
end
end
end

figure(1);imshow(uint8(bin));