图像的阈值分割(迭代法选择阈值)
生活随笔
收集整理的這篇文章主要介紹了
图像的阈值分割(迭代法选择阈值)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
迭代法閾值選擇算法是對雙峰法的改進,他首先選擇一個近似的閾值T,將圖像分割成兩個部分,R1和R2,計算出區域R1和R2的均值u1和u2,再選擇新的
閾值T=(u1+u2)/2;
重復上面的過程,知道u1和u2不在變化為止,
詳細過程的代碼:
<span style="font-size:18px;"><strong>clc; clear all; close all; I=imread('lena.jpg'); %設置初始閾值 去最大值和最小值的中間值 zmax=max(max(I)); zmin=min(min(I)); tk=(zmax+zmin)/2; %根據閾值將圖像進行分割為前景和背景,分別求出兩者的平均灰度 zo和zb b=1; [m n]=size(I); while (b)ifg=0;ibg=0;fnum=0;bnum=0;for i=1:mfor j=1:ntmp=I(i,j);if(tmp>=tk)ifg=ifg+1;fnum=fnum+double(tmp); %前景像素的個數以及像素值的總和elseibg=ibg+1;bnum=bnum+double(tmp);%背景像素的個數以及像素值的總和endendend%計算前景和背景的平均值zo=fnum/ifg;zb=bnum/ibg;if(tk==(uint8((zo+zb)/2)))b=0;elsetk=uint8((zo+zb)/2);end%當閾值不變換時,退出迭代 end disp(strcat('迭代的閾值',num2str(tk))); I1=im2bw(I,double(tk)/255); imshow(I1)</strong></span>簡單的代碼:
%讀入圖像,并進行灰度轉換 A=imread('baihe.jpg'); B=rgb2gray(A); %初始化閾值 T=0.5*(double(min(B(:)))+double(max(B(:)))); d=false; %通過迭代求最佳閾值 while~dg=B>=T;Tn=0.5*(mean(B(g))+mean(B(~g)));d=abs(T-Tn)<0.5;T=Tn; end % 根據最佳閾值進行圖像分割 level=Tn/255; BW=im2bw(B,level); % 顯示分割結果 subplot(121),imshow(A) subplot(122),imshow(BW)總結
以上是生活随笔為你收集整理的图像的阈值分割(迭代法选择阈值)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像的频域变换
- 下一篇: SVM分类的一个例子