You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何局部二值模式(LBP)会受图像归一化影响?

关于scikit-image中LBP受图像归一化影响的原因分析

我发现scikit-image库中的局部二值模式(LBP)会受图像归一化操作的影响,这与我的预期不符。由于LBP仅涉及邻域像素间的大小比较,我原本认为线性变换不会改变结果。

测试代码

import numpy as np
import skimage
from skimage.feature import local_binary_pattern

im = skimage.data.cell()

out_im = local_binary_pattern(im, 16, 2, method='uniform')
out_im = out_im[20:-20, 20:-20] # remove edges
counts,bins = np.histogram(out_im)
print('counts=',counts)
print('bins=',bins)

原始图像运行结果

counts= [   896   2743   9555  14928 108466  94041  28682  14703   8728  33458]
bins= [ 0.   1.7  3.4  5.1  6.8  8.5 10.2 11.9 13.6 15.3 17. ]

归一化操作代码

im = (im-im.min())/(im.max()-im.min())

归一化后运行结果

counts= [   937   2716   9504  16263 109302  92114  27753  14248   8667  34696]
bins= [ 0.   1.7  3.4  5.1  6.8  8.5 10.2 11.9 13.6 15.3 17. ]

原图像的像素值范围为0-255,出现这种差异的核心原因如下:

浮点数精度误差导致大小关系反转

  • 原始图像是8位无符号整数(0-255),像素间的大小比较是精确的整数运算,不存在任何歧义。
  • 归一化操作将图像转换为浮点数类型,像素值通过(im-im.min())/(im.max()-im.min())计算得到小数。当邻域像素的原始整数差值极小时(比如差值为1),归一化后的浮点数可能因精度限制产生微小舍入误差,导致原本明确的大小关系发生反转(比如原本A>B,归一化后因浮点精度变成A≈B甚至A<B)。
  • 这种微小的关系反转会直接改变局部二值模式的编码值,进而影响最终的直方图统计结果。

举个直观例子:假设原图像中中心像素是127,邻域像素是128,整数比较明确128>127;归一化后(假设图像最值为0和255),中心像素值为127/255≈0.4980,邻域像素为128/255≈0.5019,此时比较仍正常。但如果原像素差值更小或分母更大时,归一化后的差值可能小到被浮点数精度截断,甚至出现计算误差导致顺序颠倒,从而改变LBP编码。

此外,scikit-image的local_binary_pattern函数对浮点数输入的比较逻辑与整数输入存在细微差异,进一步放大了精度问题带来的影响。


内容的提问来源于stack exchange,提问作者user3433489

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:45:30