ノート
最後のコードをダウンロード フルサンプルコードをダウンロードします。または、Binder経由でブラウザでこの例を実行します。
テクスチャ分類のためのマルチブロック局所二値パターン#
この例では、マルチブロック局所二値パターン(MB-LBP)の特徴を計算する方法と、それらを視覚化する方法を示します。
特徴は、個々のピクセル値の代わりに合計されたブロックを使用する点を除いて、局所二値パターン(LBP)と同様に計算されます。
MB-LBPは、積分画像を使用して一定時間で複数のスケールで計算できるLBPの拡張です。特徴の計算には、同じサイズの9つの長方形が使用されます。各長方形について、ピクセル強度の合計が計算されます。これらの合計と中央の長方形の合計の比較によって、LBPと同様に特徴が決まります(LBPを参照)。
まず、MB-LBPの機能を説明するための画像を生成します。 (9、9)の長方形を考え、(3、3)のブロックに分割し、その上でMB-LBPを適用します。
from skimage.feature import multiblock_lbp
import numpy as np
from numpy.testing import assert_equal
from skimage.transform import integral_image
# Create test matrix where first and fifth rectangles starting
# from top left clockwise have greater value than the central one.
test_img = np.zeros((9, 9), dtype='uint8')
test_img[3:6, 3:6] = 1
test_img[:3, :3] = 50
test_img[6:, 6:] = 50
# First and fifth bits should be filled. This correct value will
# be compared to the computed one.
correct_answer = 0b10001000
int_img = integral_image(test_img)
lbp_code = multiblock_lbp(int_img, 0, 0, 3, 3)
assert_equal(correct_answer, lbp_code)
次に、演算子を実際の画像に適用し、視覚化がどのように機能するかを見てみましょう。
from skimage import data
from matplotlib import pyplot as plt
from skimage.feature import draw_multiblock_lbp
test_img = data.coins()
int_img = integral_image(test_img)
lbp_code = multiblock_lbp(int_img, 0, 0, 90, 90)
img = draw_multiblock_lbp(test_img, 0, 0, 90, 90, lbp_code=lbp_code, alpha=0.5)
plt.imshow(img)
plt.show()

上のプロットでは、MB-LBPを計算した結果と、計算された特徴の視覚化が表示されています。中央の長方形よりも強度の合計が少ない長方形は、シアンでマークされています。より高い強度値を持つものは白でマークされています。中央の長方形はそのままです。
スクリプトの合計実行時間:(0分0.688秒)