簡體   English   中英

將對象蒙版應用於LBP計算

[英]Apply object mask to LBP calculation

我看到許多文章將lbp應用於基於紋理的圖像分類。 我只是想知道關於此技術的三件事,我無法從Google找到明確的答案:

  1. 該算法如何為周圍沒有足夠相鄰像素的圖像邊界像素計算lbp。

  2. 如果我們有八個相鄰像素,那么中心像素將具有256個圖案(如果使用均勻,則為59個)。 但是,如果我們增加相鄰像素的大小(例如8或10),那么圖案的數量也會增加,對嗎? 在這種情況下,它對直方圖計算有何影響?

  3. 我們如何只為對象計算lbp。 特別是,如果要比較圖像中的對象,則只需計算對象的lbp和直方圖。 我已經嘗試通過使用opencv直方圖(它支持掩碼,而numpy直方圖不支持掩碼)來實現此想法,但它不起作用。 關於如何基於掩碼過濾lbp數組的任何想法,然后我們都可以找到直方圖。

謝謝。

  1. 邊框像素通常會被丟棄(先看看最早提出LBP的研究小組開發的Matlab實現 )。 在其他實現中(例如,參見Python的scikit-learn ),添加了黑色邊框。

  2. P像素的局部鄰域導致2 P bin直方圖。 如果設置P = 10,則特征向量將具有1024個分量。

  3. 這個玩具示例向您展示了如何從LBP直方圖計算中過濾掉不需要的圖像區域:

     import numpy as np from skimage.feature.texture import local_binary_pattern P, R = 8, 1 dim = 2**P img = np.asarray([[5, 5, 5, 5], [5, 99, 100, 5], [5, 5, 5, 5]]], dtype=np.uint8) mask = img > 5 codes = local_binary_pattern(img, P, R) hist, _ = np.histogram(codes[mask], bins=np.arange(dim+1), range=(0, dim)) 

    演示版

     In [97]: img Out[97]: array([[ 5, 5, 5, 5], [ 5, 99, 100, 5], [ 5, 5, 5, 5]], dtype=uint8) In [98]: codes Out[98]: array([[ 193., 241., 241., 112.], [ 199., 1., 0., 124.], [ 7., 31., 31., 28.]]) In [99]: mask Out[99]: array([[False, False, False, False], [False, True, True, False], [False, False, False, False]], dtype=bool) In [100]: hist Out[100]: array([1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) 

編輯

如您在評論中所要求的,這是一個更實際的示例:

import numpy as np
from skimage import io
from skimage.feature.texture import local_binary_pattern
import matplotlib.pyplot as plt

P = 8
R = 1
dim = 2**P
h_bins = np.arange(dim+1)
h_range = (0, dim)

img = io.imread('https://i.stack.imgur.com/6ESoP.png')
mask = (img > 0)
codes = local_binary_pattern(img, P, R)
h_img, _ = np.histogram(codes.ravel(), bins=h_bins, range=h_range)
h_masked, _ = np.histogram(codes[mask], bins=h_bins, range=h_range)
h_img = h_img/h_img.sum(dtype=np.float)
h_masked = h_masked/h_masked.sum(dtype=np.float)

f, [[ax0, ax1], [ax2, ax3]] = plt.subplots(2, 2)
ax0.imshow(img, cmap=plt.cm.gray)
ax0.axis('off')
ax0.set_title('Image')
ax1.imshow(mask, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('Mask')
ax2.plot(h_img)
ax2.set_title('LBP of image')
ax3.plot(h_masked)
ax3.set_title('LBP of ROI')
plt.show(f)

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM