matlab練習程式(最大類間方差二值化映像)

來源:互聯網
上載者:User

  這個過去也實現過,不過現在回頭看,當時寫的還真是糟糕,所以現在決定用matlab重寫了。而且當時的方法現在來看還真是不怎麼樣呢。

  這裡用的方法是《特徵提取與影像處理》3.3.4裡的。

  下面是代碼:

function main    img=imread('lena.jpg');    imshow(img);    img=double(img);    [m n]=size(img);        Hist=zeros(1,256);    for i=1:m        for j=1:n            Hist(img(i,j)+1)=Hist(img(i,j)+1)+1;    %求長條圖        end    end    p=Hist/(m*n);       %長條圖機率分布    uT=sum((1:256).*p(1:256));  %映像亮度均值,其實比真正的均值要大1,所以後面減了1    sigma_2=zeros(1,256);    for k=1:256        sigma_2(k)=(uT*w(k,p)-u(k,p))^2/(w(k,p)*(1-w(k,p)));    %類間方差     end    [tmp index]=max(sigma_2);       %求最大類間方差的索引    index=index-1;                  %這裡索引是1-256,實際映像灰階是0-255,所以減1        imgn=img>index;    figure;    imshow(imgn);        function re=w(k,p)      %長條圖前k個亮度級的0階累積矩        re=sum(p(1:k));       end    function re=u(k,p)      %長條圖前k個亮度級的1階累積矩        re=sum((1:k).*p(1:k));    end        end

效果:

原圖

二值化後

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.