注意
转到末尾下载完整的示例代码。 或者通过 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 秒)