Matlab圖像處理(一):二值化、開操作、連通區域提取、重心,ROI(region of interest)

本博客主要記錄我利用Matlab學習圖像處理的一些學習筆記,歡迎交流,批評指正。

本篇是第一篇,主要講解圖像處理的一些基礎知識,列出如下:

1.二值化

2.開操作

3.連通區域提取

4.連通區域重心提取

5.bouding box提取

各操作背後的理論基礎,這裏先做簡要說明:

1.二值化:通過選取適當的閾值,將圖像上的像素點的灰度值設置爲0或255【黑(0)和白(255)】,使整個圖像呈現出黑白的效果。

  圖像處理,第一步一般就是進行二值化,而二值化常用的方法有兩種(1)ostu方法,(2)Kittle算法。

  一般先將圖像灰度化,再將灰度圖像二值化,然後進行其他處理。matlab可以直接用graythresh方法找到合適的閾值。之後用im2bw將灰度圖像轉化爲二值化圖像。

2.開操作:開操作一般應用在二值圖像分析處理的基礎上,使對象的輪廓變得光滑,斷開狹窄的間斷和消除細的突出物。

主要用來保留某種結構操作,remove其他不符合結構區域的前景區域像素。此操作依賴於結構元素的選取。

3.連通區域提取:在我們討論連通區首先要明確域算法之前,首先要知道什麼是連通區域。在圖像中,最小的單位是像素,每個像素周圍有8個鄰接像素。

常見的鄰接關係有兩種:4鄰接和8鄰接,4鄰接的一共有4個點,即上下左右,如下左圖所示,8鄰接的一共有8個點,包括了對角線,如下右圖所示。

                                                                                             

如果像素A與B鄰接,那麼我們稱A與B連通,那麼有如下結論:

如果A與B連通,B與C連通,那麼A與C連通。

從視覺上來看,彼此連通的點形成了一個區域,而不連通的點形成了不同的區域,這樣一個所有彼此連通的點構成的集合,我們稱爲一個連通區域。

4.連通區域重心提取:只需要用matlab的regionprops方法就可很方便的獲取各種屬性。

5.bouding box提取:同樣用regionprops方法獲取。


源代碼如下:

%function:
%獲取圖像感興趣的位置,並進行標記
%date:2016-9-21
%author:Zyy


%清空變量,讀取圖像,並顯示其屬性
clear;close all
src = imread('rice.png');
whos


%顯示原始圖像
figure('name','myapp'),
subplot(2,2,1),imshow(src),title('src')


%用ostu方法獲取二值化閾值,進行二值化並進行顯示
level=graythresh(src);
bw=im2bw(src,level);
subplot(2,2,2),imshow(bw),title('bw')


%運用開操作消去噪點
se = strel('disk',2);%結構元素se
openbw=imopen(bw,se);
subplot(2,2,3),imshow(openbw),title('open')


%獲取連通區域,並進行顯示
L = bwlabel(openbw,4);
RGB = label2rgb(L);
subplot(2,2,4),imshow(RGB),title('rgb')


%獲取區域的'basic'屬性, 'Area', 'Centroid', and 'BoundingBox' 
stats = regionprops(openbw, 'basic');
centroids = cat(1, stats.Centroid);
figure('name','regionprops'),
%繪製開操作之後的二值化圖像
imshow(openbw),title('centroids')  
hold on
%繪製重心
plot(centroids(:,1), centroids(:,2), 'b*'),
%繪製感興趣區域ROI
for i=1:size(stats)
     rectangle('Position',[stats(i).BoundingBox],'LineWidth',2,'LineStyle','--','EdgeColor','r'),
end
hold off

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章