【发布时间】:2016-03-03 21:22:58
【问题描述】:
我试图在将 elbp 函数应用于灰度图像后显示一个 lbp 图像,该函数是在 python 的 face 模块中手动公开的。 这是代码:
LBP = cv2.face.elbp(gray_roi,1,8)
cv2.imshow("Face",LBP)
但是,我得到的是一个纯黑色的窗口,而且我注意到cols和rows总是比原始图像小2,这是错误信息:
无法将输入数组从形状 (95,95) 广播到形状 (97,97)
我注意到另一个人问了同样的问题,但使用的是 c++:Unable to display image after applying LBPH (elbp()) operator in opencv 但是我无法理解的是他将图像归一化以适应屏幕渲染范围是什么意思?
这是我的图像的矩阵输出:
如您所见,像素强度分布是正常的。
这里是实际的elbp function!
【问题讨论】:
-
对不起,这是我第一次提问,不确定格式:(
-
python 函数会这样做很奇怪,但可能它在内部将值存储在 [0-1] 区间中,尝试将图像乘以 255 并查看它是否仍然是黑色
-
我尝试使用 cv2.normalize(LBP1,LBP1,0,255,cv2.NORM_MINMAX) ,但结果还是一样:(
-
你还是一无所获?我真的不确定,你必须深入研究这个 elbp 函数文档,看看它的行为如何。除非比我聪明的人知道这一点:)
-
我对较小尺寸的猜测是:LBP 算法应用掩码,以图像像素为中心。假设蒙版是 3x3 像素大小,在源图像的边缘,该蒙版无法完全应用,因为不存在 3 或 5 个像素(在图像的一侧),因此根本不应用它 - 因此LBP 结果数组少了两行/列 - LBP 输出的左上角给出了原始图像左上角的像素的结果。显然,当您通过指定更大的半径来增加掩码大小时,输出 LBP 结果矩阵将变得更小。