matlab实现ostu法图像分割

img= imread('rice.png');
img = medfilt2(img);
subplot(1,2,1),imshow(img);
title('原图像')
[M,N] = size(img);
sum_total = sum(img(:));
ave_total = sum_total/(M*N);
[a,b] = imhist(img);
a = a';
b = b';
T_optimal = 1;
h_max =0;
for T=2:255
%     将直方图分开
    a1 = a(1:T);
    a2 = a(T:256);
    b1 = b(1:T);
    b2 = b(T:256); 
%     分别求两部分的各自均值
    a1_ave = sum(a1.*b1)/sum(a1);
    a2_ave = sum(a2.*b2)/sum(a2);
    w1 = sum(a1)/(M*N);
    w2 = sum(a2)/(M*N);
%     目标函数为w1*(a1_ave-ave_total)^2+w2*(a2_ave-ave_total)^2
    h = w1*(a1_ave-ave_total)^2+w2*(a2_ave-ave_total)^2;
    if h>h_max
        h_max = h;
        T_optimal = T;
    else
        continue
    end
end
T_optimal
h_max
for i=1:M
    for j=1:N
        if img(i,j)<T_optimal
            img(i,j) = 0;
        else
            img(i,j) = 255;
        end
    end
end
subplot(1,2,2),imshow(img);
title('阈值分割后的图像')

先展示一下最后的求解结果
输出结果

在这里插入图片描述
在这里插入图片描述
基本的思想就是循环求解各个组的平均值和计算目标函数的最大值,最后实现了一个基于求解的阈值的图像二值化操作,自我感觉还不错

graythresh()

可以用来直接求解灰度图像的ostu阈值,做了一个简单的对比,发现自己的计算结果还是可以的
在这里插入图片描述

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Otsu算是一种经典的图像分割,也称为大津算。该算的基本思想是通过循环求解不同阈值下的两个组的平均值,并计算目标函数的最大值,从而得到一个最佳的阈值,将图像分割成两部分。在Matlab中,可以使用灰度图像的imhist函数和graythresh函数来实现Otsu算图像分割。 首先,通过imhist函数计算图像的直方图,并将其分为两个组。然后,根据每个组的像素值和对应的直方图值,计算两个组的均值和权重。接着,利用目标函数w1*(a1_ave-ave_total)^2 + w2*(a2_ave-ave_total)^2来评估不同阈值下的分割效果。最后,在循环中找到使目标函数最大化的阈值,即T_optimal。 然后,将根据最佳阈值将图像进行二值化分割。根据图像中每个像素的灰度值与阈值的比较,将像素分为背景和前景两部分,将图像中小于阈值的像素设为0,大于阈值的像素设为255。最终得到分割后的图像。 综上所述,通过Matlab中的Otsu算,可以实现对图像的自动分割,将图像分为背景和前景两部分。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* *2* [matlab实现ostu图像分割](https://blog.csdn.net/wdf666520/article/details/109086335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值