資源簡介
代碼用matlab編寫的,三個閾值分割的示例,本算法用的是最大內(nèi)間方差算法改造而成的
代碼片段和文件信息
%-----------------------------基于最大內(nèi)間方差思想的多閾值圖像分割算法-------------------------
tic
clc
clear?all;
close?all;
img?=?imread(‘lenna.bmp‘);
I_gray=rgb2gray(img);%將三原色彩色圖像轉(zhuǎn)化為灰度圖像
I_double=double(I_gray);????%轉(zhuǎn)化為雙精度,因為大多數(shù)的函數(shù)和操作都是基于double的
[widlen]=size(I_gray);?????%wid為行數(shù),len為列數(shù)b
colorlevel=256;?????%灰度級
hist=zeros(colorlevel1);???%直方圖,256×1的0矩陣
threshold_num=3;%代表有三個閾值
threshould_vector=zeros(threshold_num1);%初始化一個向量數(shù)組用于存儲閾值
W=zeros(threshold_num+11);%用于存儲每個部分的w的值
miu=zeros(threshold_num+11);%用于存儲閾值分割出來的圖像各處的平均值
best_threshold=zeros(1threshold_num);%用于保存最好的閾值
%?file_ceache?=?fopen(‘test.txt‘‘w‘);%用于存儲命令行輸出的數(shù)據(jù)
%計算直方圖,統(tǒng)計灰度值的個數(shù)
for?i=1:wid
????for?j=1:len
????????m=I_gray(ij)+1;????%因為灰度為0-255所以+1
????????hist(m)=hist(m)+1;
????end
end
%直方圖歸一化
hist=hist/(wid*len);
%miuT為總的平均灰度,hist[m]代表像素值為m的點個數(shù)
miuT=0;
for?m=1:colorlevel
????miuT=miuT+(m-1)*hist(m);
end
max_fangcha=0;??%初始方差大小
%---------------------程序的開始-----------------------------------
for?t1=1:colorlevel-2
????for?t2=t1+1:colorlevel-1
????????for?t3=t2+1:colorlevel
????????????miu=zeros(threshold_num+11);
????????????W=zeros(threshold_num+11);
????????????%計算第一個目標所占的比例
????????????for?m=1:t1
????????????????W(1)=W(1)+hist(m);
????????????end
????????????%計算第二個目標所占的比例
????????????for?m=t1+1:t2
????????????????W(2)=W(2)+hist(m);
????????????end
????????????%計算第三個目標所占的比例
????????????for?m=t2+1:t3
????????????????W(3)=W(3)+hist(m);
????????????end
????????????%計算第四個目標所占的比例
????????????W(4)=1-W(1)-W(2)-W(3);
????????????%?????????????fprintf(file_ceache‘%d---%d---%d目標W的值:%f%f%f%f\n‘t1t2t3W(1)W(2)W(3)W(4));
????????????%計算目標的平均灰度
????????????for?m=1:colorlevel
????????????????if(m<=t1)
????????????????????miu(1)=miu(1)+(m-1)*hist(m);
????????????????else?if(m>t1&&m<=t2)
????????????????????????miu(2)=miu(2)+(m-1)*hist(m);
????????????????????else?if(m>t2&&m<=t3)
????????????????????????????miu(3)=miu(3)+(m-1)*hist(m);
????????????????????????else
????????????????????????????miu(4)=miu(4)+(m-1)*hist(m);
????????????????????????end
????????????????????end
????????????????end
????????????end
????????????%????f
評論
共有 條評論