Haar-like特征
生活随笔
收集整理的這篇文章主要介紹了
Haar-like特征
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
haar特征多用于人臉檢測、行人檢測等;Haar-like特征可以理解為卷積模板;該模板的特征值為白色矩形像素和減去黑色矩形像素和,反映了圖像的灰度變化情況,但矩形特征只對一些簡單的圖形結構,如邊緣、線段較敏感,所以只能描述特定走向(水平、垂直、對角)的結構。
Haar-like特征分類
Haar-like特征可以分為四類:線性特征、邊緣特征、點特征(中心特征)、對角線特征:
積分圖
計算haar特征值
def intergral(self,image):height,weigth = np.shape(image)output = np.zeros((height + 1,weigth + 1))for h in range(1,height + 1):columnSum = np.zeros((weigth + 1)) for w in range(1,weigth + 1):columnSum[w] = columnSum[w - 1] + image[h - 1][w - 1] # 每行的列合計output[h][w] = output[h - 1][w] + columnSum[w]return outputdef HaarRectPyramidUp(self,imageSize,minSize=1,minDeep=2):size = minSizedeep = minDeepyield size,deepwhile True:if size < deep:size = size + 1deep = size * minDeepelse:deep = deep + 1size = deep * minSizeif max(size,deep) > imageSize:breakif size == deep and size * 2 > imageSize:breakyield size,deepdef Haar2RectLR(self, sum, minSize=1, minDeep=2):'''b | d| e|--------------------| white | black |--------------------c | white a| black f|# white= a+ b-c-d'''height,weigth = np.shape(sum) feature_map = []for size,deep in self.HaarRectPyramidUp(weigth - 1,minSize,minDeep): for y in range(1,height - deep + 1):for x in range(1,weigth - 2 * size + 1): by = dy = ey = y - 1cy = ay = fy = y + deep - 1bx = cx = x - 1dx = ax = x + size - 1ex = fx = x + size * 2 - 1white = sum[ay][ax] + sum[by][bx] - sum[cy][cx] - sum[dy][dx]black = sum[fy][fx] + sum[dy][dx] - sum[ay][ax] - sum[ey][ex]feature_map.append(int(white) - int(black)) return feature_mapdef GetHaarFeatureDescriptor(self,images,imgSize):features = []for fn in images: # 讀入彩色圖像,并轉換為灰度值圖像img = cv2.imread(fn, cv2.IMREAD_GRAYSCALE)# 圖片拉伸img = cv2.resize(img, imgSize, interpolation=cv2.INTER_CUBIC)# 歸一化img = img / float(np.max(img)) * 255# 積分圖intim = self.intergral(img) # 垂直方向邊緣特征feature = self.Haar2RectLR(intim) features.append(feature)return features總結
以上是生活随笔為你收集整理的Haar-like特征的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决 Python2.7 报错 Unic
- 下一篇: 使用opencv训练cascade分类器