本博客主要記錄我學習運用matlab進行一些基本的圖像處理的一些筆記,如果有不當的地方,歡迎批評指正,一起學習,一起進步。
本篇是第一篇,只涉及到一些基本的操作,涉及到的知識點如下:
1、二值化
2、開操作
3、連通區域提取
4、連通區域的重心提取
5、BoundingBox提取
各操作背后的理論基礎,大都可以在岡薩雷斯的數字圖像處理中找到,而且matlab的幫助中會給出實現算法的論文出處。感興趣的朋友可以深入研究。
圖像處理,第一步一般是進行二值化,而二值化最常用的方法就是ostu方法。matlab可以用level=graythresh(src)直接獲取二值化的閾值。之后用im2bw二值化圖像。
處理圖像時經常運用到一些形態學圖像處理方法,而幸好matlab就為我們提供了強有力的形態學處理工具箱。本學習筆記運用到了開操作對圖像進行處理,可以消除一些噪點。
獲取連通區域之后,我們可能會想知道該區域的一些屬性(如重心、邊界框等),matlab的regionprops為我們提供了大量的屬性,只要一個命令就可搞定,regionprops。
本例程的code如下:
%function:
% 獲取感興趣區域,並進行提取、標記
% 源圖像位於E:\ProgramFiles\MATLAB\R2013b\toolbox\images\imdemos
% 具體路徑因個人電腦而異
%date:2015-1-7
%author:chenyanan
%清空變量,讀取圖像,並顯示其屬性
clear;close all
src = imread('images/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);
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
運行效果的圖片如下:


