基于MATLAB的二值化方法(转载+勘误)

本文介绍了一种基于迭代二值法的图像分割算法实现,通过不断调整阈值直至前景和背景灰度值达到稳定,从而实现图像的二值化处理。文章提供了MATLAB代码示例,展示了从读取原始图像到生成二值图像的完整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原网址:
https://blog.youkuaiyun.com/vicdd/article/details/53326474

1、迭代二值法代码(已改bug)

close all;%关闭所有窗口  
clear;%清除变量的状态数据  
clc;%清除命令行  

I=imread('./image/gt.png');  
subplot(1,2,1);  %生成一行两列的展示figure,并展示在1的位置
imshow(I);  
title('原图'); 
hold on;

%迭代式阈值分割   
zmax=max(max(I));%取出最大灰度值  
zmin=min(min(I));%取出最小灰度值  
tk=(zmax+zmin)/2;  %初始阈值等于图像中间灰度
bcal=1;  %无意义label,决定是否跳出循环
[m,n]=size(I);  %取图像的长宽
while(bcal)  
    %定义前景和背景数  
    iforeground=0;  
    ibackground=0;  
    %定义前景和背景灰度总和  
    foregroundsum=0;  
    backgroundsum=0;  
    for i=1:m  
        for j=1:n  
            tmp=I(i,j);  %临时像素值
            if(tmp>=tk)  %将像素分为前景、后景
                %前景灰度值  
                iforeground=iforeground+1;  
                foregroundsum=foregroundsum+double(tmp);  
            else  
                ibackground=ibackground+1;  
                backgroundsum=backgroundsum+double(tmp);  
            end  
        end  
    end  
    %计算前景和背景的平均值  
    z1=foregroundsum/iforeground;  
    z2=backgroundsum/ibackground;  
    tktmp=uint8((z1+z2)/2);  %新阈值
    if(tktmp==tk)  
        bcal=0;  
    else  
        tk=tktmp;  
    end  
    %当阈值不再变化时,说明迭代结束  
end  
disp(strcat('迭代的阈值:',num2str(tk)));%在command window里显示出 :迭代的阈值:阈值  
newI=im2bw(I,double(tk)/255);%函数im2bw使用阈值(threshold)变换法把灰度图像(grayscale image)
subplot(1,2,2);
imshow(newI);
title('binary');
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值