基于matlab的目标检测的基本思路
圖像處理之目標(biāo)檢測
- 目標(biāo)檢測的基本思路
- 遇到的問題
- 鹿
- 人
- 鷹
- 花
- 狗
- 總結(jié)
- 附錄
目標(biāo)檢測的基本思路
對于輪廓清晰的圖片,可以先檢測出他的輪廓,此時會有背景的輪廓也被添加進(jìn)來,可以通過先填洞,再腐蝕和膨脹來消除多余的邊緣來找到目標(biāo)的輪廓。對于輪廓不清晰或者背景很復(fù)雜的圖片,可以通過圖像二值化,用特定的閾值將需要的目標(biāo)篩選出來,或是將圖像分塊處理,再進(jìn)行形態(tài)學(xué)操作使輪廓更為具體。
遇到的問題
鹿
對于彩色圖像想要提取某一特定顏色閾值比較難選取,圖像中目標(biāo)的顏色不是唯一的,有彩色和黑色和白色,可以通過將rgb空間轉(zhuǎn)換為ycbcr空間,在ycbcr上分別選取閾值
如圖
可以大致識別出鹿的輪廓,再將圖像進(jìn)行膨脹腐蝕,消除小的連通域即可獲得輪廓
腐蝕,并選區(qū)最大聯(lián)通域后如圖
有的地方被腐蝕掉了。
代碼如下:
人
先將圖像二值化處理后發(fā)現(xiàn)圖像下半部分有明顯的干擾信息,所以決定將圖像分成上下兩部分來處理,由于下半部分不存在要識別的目標(biāo),所以下半部分可以顯示原圖,上半部分二值化后由于本身就具有很大的差別,可以比較清晰的顯示出目標(biāo)來,如圖
后續(xù)處理與上圖類似
結(jié)果如圖
把圖片分成兩塊:
img=imread('people.jpg'); img1=imcrop(img,[0,0,400,170]); img2=imcrop(img,[0,171,400,304]);其余正常處理
鷹
這張圖目標(biāo)與背景區(qū)別很大,比較好檢測
最開始二值化的時候選好閾值即可,再用canny算子提取邊緣
雖然有一條背景的線,但他不是連通域,用imfill填滿連通域后再腐蝕即可把這條線消除
提取邊緣后結(jié)果如圖
代碼如下:
img_bw=im2bw(img_gray,0.8);img_edge=edge(img_bw,'canny'); %imshow(img_edge); dil_filter=strel('square',2);%膨脹一下 img_edge=imdilate(img_edge,dil_filter);img_edge=bwperim(img_edge); img_full=imfill(img_edge,'holes');ero_filter=strel('square',3); img_full=imerode(img_full,ero_filter); img_full=bwareaopen(img_full,50);out_edge=edge(img_full,'canny'); out_edge=imdilate(out_edge,dil_filter);花
花的紅色其實可以用rgb中的r或者g來分離,但是也可以直接轉(zhuǎn)換為二值圖設(shè)定閾值來分離,會有很小的葉子被檢測到,腐蝕后會有斑點(diǎn),只需要消除小的連通域即可。如圖
狗
與花類似,第一步用閾值分割即可達(dá)到較好的效果
總結(jié)
用閾值法分割可以得到大部分比較好的效果,這個閾值我的理解就是在一張灰度圖中,灰度值不變的區(qū)域圖像的一階導(dǎo)數(shù)為零,直到出現(xiàn)了灰度值變化,一階導(dǎo)數(shù)大于或小于零,而閾值的存在就是為了給何時判定一階導(dǎo)數(shù)不為零選擇了一個標(biāo)準(zhǔn),而灰度圖像的像素值又是由彩色圖像的RGB三個值決定的,一般是由傳統(tǒng)公式Gray= R0.299+G0.587+B*0.114來計算的,可以看到G的比重最大,B的比重最小,所以轉(zhuǎn)換出灰度圖像的結(jié)果中,如果原圖的綠色信息或者紅色信息較為敏感,那么在進(jìn)行閾值分割的時候用一步分割即可得到較好的結(jié)果,比如花的圖片。另外就是在RGB圖中本身顏色差別就很大,這樣RGB三個通道的值的區(qū)別全都很大,也能得到較好的結(jié)果,比如狗的圖片,這樣的圖片就比較適合用閾值法分割。
而不具備這樣先天條件的圖片,RGB也不具備很好的物體的具體顏色信息,所以我選擇用ycbcr色彩空間進(jìn)行閾值選取,其中Y表示顏色的明亮度和濃度,而Cb和Cr則分別表示顏色的藍(lán)色濃度偏移量和紅色濃度偏移量。可以界定一個范圍來帥選所需要的區(qū)域,這樣再進(jìn)行二值化就效果好了很多。
附錄
濾波器h=fspecial(type,parameters); parameters為可選項,是和所選定的濾波器類型type相關(guān)的
配置參數(shù),如尺寸和標(biāo)準(zhǔn)差等。
type為濾波器的類型。其合法值如下:
合法取值 功能
‘a(chǎn)verage’ 平均模板
‘disk’ 圓形領(lǐng)域的平均模板
‘gaussian’ 高斯模板
‘laplacian’ 拉普拉斯模板
‘log’ 高斯-拉普拉斯模板
‘prewitt’ Prewitt水平邊緣檢測算子
‘sobel’ Sobel水平邊緣檢測算子
中值濾波h=medfilt2(I1,[m,n]);
結(jié)構(gòu)元素函數(shù)strel(shape,parameters); shape指定了結(jié)構(gòu)元素的形狀。parameters是和輸入shape有關(guān)的參數(shù)。
合法取值 功能描述
‘a(chǎn)rbitrary’或為空 任意自定義結(jié)構(gòu)元素
‘disk’ 圓形結(jié)構(gòu)元素
‘square’ 正方形結(jié)構(gòu)元素
‘rectangle’ 矩形結(jié)構(gòu)元素
‘line’ 線性結(jié)構(gòu)元素
‘pair’ 包含2個點(diǎn)的結(jié)構(gòu)元素
‘diamond’ 菱形的結(jié)構(gòu)元素
‘octagon’ 8角形的結(jié)構(gòu)元素
膨脹I2=imdilate(I,SE); SE=strel(shape,parameters);
腐蝕 I2=imerode(I,SE);
開運(yùn)算I2=imopen(I,SE);消除細(xì)小物體
閉運(yùn)算I3=imclose(I,SE);填充細(xì)小空洞,連接鄰近物體
擊中擊不中變換Ihm=bwhitmiss(I,SE1,SE2);
形態(tài)學(xué)處理Iout=bwmorph(I,operation,n)
合法取值 功能描述
‘bridge’ 橋接有單個像素縫隙分割的前景像素
‘clean’ 清楚孤立的前景像素
‘diag’ 圍繞對角線相連的前景像素進(jìn)行填充
‘fill’ 填充單個像素的孔洞
‘hbreak’ 去掉前景中的H形連接
‘majority’ 如果點(diǎn)P的8領(lǐng)域中一半以上像素為前景像素,則P為前景像素,否則為背景。
‘remove’ 去除內(nèi)部像素(無背景像素相鄰的前景)
‘shrink’ 將物體收縮為一個點(diǎn)或者帶洞的環(huán)形
‘skel’ 骨骼化圖像
‘spur’ 去除“毛刺”
‘thicken’ 粗化物體
‘thin’ 將物體細(xì)化至最低限度相連的線形
邊緣檢測BW=edge(I,type,thresh,direction,’nothinning’) thresh是敏感度閾值參數(shù),任何灰度值低于此閾值的邊緣將不會被檢測到。默認(rèn)值為空矩陣[],此時算法自動計算閾值。
type合法取值 梯度算子
‘sobel’ sobel算子
‘prewitt’ prewitt算子
‘reberts’ robert算子
基于高斯-拉普拉斯算子的邊緣檢測BW=edge(I,’log’,thresh,sigma) sigma指定生成高斯濾波器所使用的標(biāo)準(zhǔn)差。默認(rèn)時,標(biāo)準(zhǔn)差為2。
基于Canny算子的邊緣檢測BW=edge(I,’canny’,thresh,sigma)
總結(jié)
以上是生活随笔為你收集整理的基于matlab的目标检测的基本思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会议室可以使用全彩LED显示屏吗?
- 下一篇: 崇阳职校计算机基础知识试题及答案,崇阳职