最大似然分類器

癮. .發表於2021-01-03

最大似然分類器:

簡單記錄程式碼:

function re=maxlike()
[filename,pathname]=uigetfile({'*.jpg;*.bmp;*.tif;*.png;*.gif','All Image Files';'*.*','All Files'});%動態開啟檔案
image = imread([pathname,filename]);%讀取
figure(1);imshow(image);
image=double(image);
[m,n,bands]=size(image);
k=input('請輸入要分類的個數:  ');%輸入要選取的樣本類別數
aver=zeros(k,bands);%申請矩陣空間儲存樣本資料各類別各波段均值
thi=zeros(k,1);%每個樣本類別方差
%對所選取樣本資料進行處理求得各類別均值
for i=1:k%對選中類別迴圈
    str=['請在螢幕影像上選擇第',num2str(i),'種分類樣本,選擇完畢請回車確定'];
    disp(str);
    [y,x]=getpts;%從影像上獲取資料點
    A=[round(y),round(x)];
    for band=1:bands%對影像每個波段進行計算,求取指定類別每個波段均值
        Sum=[];
        temp=image(:,:,band);
         for count=1:size(A,1)%對取得點迴圈
            Sum=[Sum;temp(A(count,2),A(count,1))];
         end
          aver(i,band)=mean(Sum);%求均值
          thi(i,band)=cov(Sum);
    end
    
end
image=reshape(image,m*n,bands);%將影像資料重塑成為一列為一個波段資料的形式,便於計算
p=zeros(k,m*n);%申請矩陣空間儲存每個類別影像各個點資料分別到各類的概率
for i=1:m*n
    for t=1:k
        for band=1:bands
            p(t,i)=p(t,i)+exp(-(image(i,band)-aver(t,band))^2/(2*thi(t,band)))/sqrt(2*pi*thi(t,band));
        end
    end
end
[~,index]=max(p);
index=reshape(index,m,n);
re=index/k;
figure(2),imshow((re));
end

相關文章