本博客主要記錄我學習運用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
運行效果的圖片如下: