首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cv2.COLOR_BGR2GRAY或color.rgb2gray作为skimage的hog描述符?

问使用cv2.COLOR_BGR2GRAY或color.rgb2gray作为skimage的hog描述符?
EN

Stack Overflow用户
提问于 2019-12-17 01:58:57
回答 2查看 1.8K关注 0票数 0

我想训练一个支持向量机,从skimage中提取hog描述符所提取的hog特征。图像有3个通道(RGB-图像),我想在提取hog特征之前将其转换为灰度。下面是问题所在,当我使用来自OpenCV的以下代码时

代码语言:javascript
复制
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

然后我得到了没有标准化的特征,这意味着像素值仍然在0到255之间。

当我使用Skimage的代码时

代码语言:javascript
复制
img_gray = color.rgb2gray(image)

然后,这些值似乎被标准化了,因为像素值接近。在0到1之间。

我尝试了这两个版本的hog特征提取,结果是相似的,但不是相同的,当我训练SVMs时,结果也是相似的,但不是相同的。当我用归一化图像训练支持向量机时,精度等都有所提高,但不多。

当我查看skimage hog.html中的以下链接时,我假设在使用HOG描述符之前不需要对图像进行标准化,因为这个链接中的宇航员图像也没有标准化。不过,我还是觉得很困惑。您能否证实或不同意我的假设,即使用OpenCV的代码比使用skimage的代码从rgb转换为灰色更好?

完整的代码:

代码语言:javascript
复制
import cv2
img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY

或

代码语言:javascript
复制
from skimage import color
img_gray = color.rgb2gray(image)

在此之前

代码语言:javascript
复制
from skimage import feature
feat = feature.hog(img_gray, orientations=12, pixels_per_cell=(5,5), cells_per_block=(2,2), transform_sqrt=True, visualize=False)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-17 05:13:09

  1. 关于灰度输入。如果您使用灰度图像作为输入。转换为浮动或其他方面不会有太大的影响。这是因为如果您查看skimage的实现。您将注意到,如果输入是灰度,则在内部将其转换为浮动图像。请参阅这里的skimage hog实现 如果image.dtype.kind == 'u':#将uint图像转换为float #,以避免在减去无符号数字图像=image.astype(‘image.astype’)时出现问题
  2. 关于正常化。这是因为标准化的作用类似于直方图均衡。有效地拉伸或压缩动态范围,使您的图像内容得到增强。这就是你观察这种行为的原因。这是意料之中的。
票数 1
EN

Stack Overflow用户

发布于 2019-12-17 02:24:36

这是如何在范围0 1内正常化,但确保图像具有浮动数据类型。

代码语言:javascript
复制
img_gray_normalized = cv2.normalize(img_gray , None, alpha=0, beta=1, 
                                   norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59366605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档