【圖像分割】基于FLICM算法實現(xiàn)圖像分割含Matlab源碼
1 簡介
聚類就是把具有相似性的事物區(qū)分開并加以分類。聚類分析是依據(jù)研究對象(樣品
或指標(biāo))的特征,對其進行分類。其目標(biāo)是:組內(nèi)對象之間是相似的或是相關(guān)的,而不同組中的對象不相同或者是不相關(guān)的,聚類過程中要求分類準(zhǔn)確,分類的過程和結(jié)果是可以重復(fù)的,但分類并不依賴于分析者的主觀判斷。聚類分析作為多元統(tǒng)計分析的方法之一,也是統(tǒng)計模式識別中的非監(jiān)督模式識別的一個重要分支。
聚類可以看作是一種分類,用類標(biāo)號從而創(chuàng)建對象的標(biāo)記,多數(shù)情況下我們對于分
類識別的對象是未知的,因此聚類分析通常也被稱為無監(jiān)督分類。與此相反,用一個由類標(biāo)號已知的對象建立的模型,對新的、無標(biāo)記的對象賦予一個類的標(biāo)號稱為有監(jiān)督分類。在現(xiàn)實中由于事物的復(fù)雜性,聚類對象之問的界限往往不是特別清晰,比如對于腦組織核磁共振圖像這樣的醫(yī)學(xué)圖像來說,由于不同腦組織(如白質(zhì)、灰質(zhì)和腦脊液)等混雜在一起會導(dǎo)致圖像更加不清晰。因此使用基于多元統(tǒng)計分析的聚類方法分析腦組織核磁共振圖像將會受到極大的限制。模糊集合的出現(xiàn),讓傳統(tǒng)的聚類分析看到了曙光,從而出現(xiàn)了基于模糊集理論的聚類方法——模糊聚類分析。通過模糊聚類分析能夠客觀地描述具有不明性的對象,使得實際的聚類結(jié)果更加準(zhǔn)確合理。
目前,應(yīng)用最廣泛的是模糊C均值聚類算法,簡稱FCM算法。該方法通過對目標(biāo)函
數(shù)的迭代優(yōu)化獲取對數(shù)據(jù)集的模糊分類,即將聚類歸結(jié)為一個帶有約束的非線性規(guī)劃問題,這種方法設(shè)計簡單,可以轉(zhuǎn)化為優(yōu)化問題進行求解,在計算機上實現(xiàn)比較容易,另外,模糊C均值聚類在圖像分割中是一種無監(jiān)督模糊聚類的標(biāo)定過程,因此這種方法從理論上看很適合醫(yī)學(xué)圖像的分割。
傳統(tǒng)的?FCM?算法,對沒有被噪聲污染的圖像有很好的分割效果,但對于被噪聲污
染的圖像,如圖(3-1)所示,分割效果不太理想。這種對噪聲敏感實質(zhì)上是由于沒有利用被分割像素的空間位置信息,忽略了像素之間的鄰域信息,因此對于信噪比低的圖像,分割效果很不理想。在圖像分割過程中,既能減少各種噪聲的干擾,又能對原始圖像信息進行精確分類是基于標(biāo)準(zhǔn)?FCM?圖像分割方法需要改進的一個方向。



2 部分代碼
clear all;
clc;
% image = load('im.txt');
image = imread('017.jpg');
[row,col,channels] = size(image);
if (channels > 1)
? ?image = rgb2gray(image);
? ?figure;
? ?subplot(131)
? ?imshow(image);
? ?title('原圖像')
else
? ?figure;
? ?subplot(131)
? ?imshow(image);
? ?title('原圖像')
end
%對輸入圖像進行高斯濾波
originimg=image;
originimg=mat2gray(originimg);
[ori_row,ori_col]=size(originimg);
sigma = 1.6; ? ? ?%sigma賦值
N = 7; ? ? ? ? ? ?%大小是(2N+1)×(2N+1)
N_row = 2*N+1;
OriImage_noise = imnoise(originimg,'gaussian'); %加噪
gausFilter = fspecial('gaussian',[N_row N_row],sigma); ? ? ?%matlab 自帶高斯模板濾波
img=imfilter(OriImage_noise,gausFilter,'conv');
%figure;
subplot(132)
imshow(img);
title('高斯濾波后')
key_mat = []; ?% 定義一個空的關(guān)鍵像素矩陣
non_key_mat = []; ?%非關(guān)鍵像素矩陣
for i = 2:3:row
? ?for j = 2:3:col
? ? ? ?if row-i<1|col-j<1
? ? ? ? ? ?continue;
? ? ? ?end
? ? ? ?window_image = img(i-1:i+1,j-1:j+1);
? ? ? ?[r,c] = size(window_image);
? ? ? ?max_value = max(max(window_image)); ?% 窗口最大值
? ? ? ?[x,y] = find(window_image==max_value);
? ? ? ?key_mat = [key_mat;[i-2+x(1),j-2+y(1),max_value]];
? ? ? ?img(i-2+x(1),j-2+y(1))=-1;
% ? ? ? ? for m = 1:r
% ? ? ? ? ? ? for n = 1:c
% ? ? ? ? ? ? ? ? non_key_mat = [non_key_mat;i-2+m,j-2+n,window_image(m,n)];
% ? ? ? ? ? ? end
% ? ? ? ? end
? ?end
end
[r,c]=find(img ~=-1);
value = (img(find(img ~=-1)));
non_key_mat = [r c value];
% for m = 1:row
% ? ? for n = 1:col
% ? ? ? ? tmp = [m,n,img(m,n)];
% ? ? ? ? if ismember(tmp,key_mat,'rows') == 1
% ? ? ? ? ? ? continue;
% ? ? ? ? end
% ? ? ? ? non_key_mat = [non_key_mat;tmp];
% ? ? end
% end
New_img = key_mat(:,3);
New_coord = key_mat(:,1:2);
cNum = 2;
m = 2;
winSize = 5;
maxIter = 59;
thrE ? ?= 0.00001;
% FLICM
[imOut,iter] = FLICM_clustering( New_img, cNum, m, winSize, maxIter, thrE );
imOut = double(imOut);
key_mat = [key_mat imOut];
figure;
gscatter(key_mat(:,1),key_mat(:,2),imOut);
size(non_key_mat);
size(key_mat);
key_mat;
%key_mat = sortrows(key_mat,[1 2])
%img(find(img==-1));
% [xx,yy] = find(img ==-1);
% key = sortrows([yy xx],1)
% img(find(img==-1)) = key_mat(:,4)
for i = 1:size(non_key_mat,1)
? ?z = ones(1,size(key_mat,1))*non_key_mat(i,1);
? ?z=z';
? ?zc = ones(1,size(key_mat,1))*non_key_mat(i,2);
? ?zc=zc';
? ?size(key_mat(:,1));
? ?dis = (z-key_mat(:,1)).* (z-key_mat(:,1))+(zc-key_mat(:,2)).*(zc-key_mat(:,2));
? ?dis = sqrt(dis);
? ?[labelx,labely] = min(dis);
? ?dis = sort(dis);
? ?xx = key_mat(labely,:);
? ?img(non_key_mat(i,1),non_key_mat(i,2)) = xx(4);
end
for j = 1:size(key_mat,1)
? ?img(key_mat(j,1),key_mat(j,2)) = key_mat(j,4);
end
% figure;
% imshow(img,[]);
subplot(133)
imagesc(label2rgb(img,'jet','w','shuffle'))
axis image; axis off;
set(gca,'position',[0 0 1 1]);
axis normal
? ? ?title('FLFCM分割圖') ?
3 仿真結(jié)果

4 參考文獻
[1]詹新玲. 基于FLICM模糊聚類和水平集算法的醫(yī)學(xué)圖像分割[D]. 河北大學(xué).
博主簡介:擅長智能優(yōu)化算法、神經(jīng)網(wǎng)絡(luò)預(yù)測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領(lǐng)域的Matlab仿真,相關(guān)matlab代碼問題可私信交流。
部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除。
