我正在try 使用skImage.Feature中的实现来提取给定图像(2D)上的一些ROI的HOG描述符.我附上了一些样本的投资回报率,我已经提取.我只是使用带有所有缺省值的HOG描述符.

配置:PYTHON:3.9.13;SCRICKIT-IMAGE:0.19.2;Windows 10

返回的特征向量没有任何内容,即它是空数组([]).

注意:我想用正样本和负样本的HOG描述子来训练线性支持向量机模型.

一百零二 positive sample. negative sample.

Code to reproduce problem

from skimage.feature import hog
import cv2 as cv
img = cv.imread(<path to image>, cv.IMREAD_GRAYSCALE)
desc = hog(img)
print(desc)

#output: array([], dtype=float64)

功能描述符不应为空.即使我给出的是一个完全空白的白色图像,也应该有一个描述符.但同样,我也没有得到阳性样本的描述符.

有没有人可以帮我解决哪里出了问题,或者是实施上的问题?

推荐答案

我引用了the source code

它看起来像是为n_blocks_rowxn_blocks_col元素生成输出,其中包含:

s_row, s_col = image.shape[:2]
c_row, c_col = pixels_per_cell  # input parameter, 8x8 by default
b_row, b_col = cells_per_block  # input parameter, 3x3 by default

n_cells_row = int(s_row // c_row)  # number of cells along row-axis
n_cells_col = int(s_col // c_col)  # number of cells along col-axis

n_blocks_row = (n_cells_row - b_row) + 1
n_blocks_col = (n_cells_col - b_col) + 1

在图像只有16行的情况下,您可以得到两个垂直单元格,这不足以填充一个3x3单元格块.因此,n_blocks_row是0,输出为0x22块array.

对于这样的小图像,您必须更改pixels_per_cell和/或cells_per_block参数,以使pixels_per_cell[0] * cells_per_block[0]不大于图像高度(图像宽度也是如此).

例如,这对我很管用:

skimage.feature.hog(img, cells_per_block=(2,2))

虽然我不知道这是否会产生有用的输出.每块电池较少可能不会给您带来好的结果.也许你可以让积木变得更宽,而不是让它们变得更高,这样它们的大小就保持不变?大概cells_per_block=(2,5)个?对于这一点,我没有足够的经验来给出建议.

Python相关问答推荐

日程优化问题不知道更好的方式来呈现解决方案- Python / Gekko

如何将Pydantic URL验证限制为特定主机或网站

如何从不同长度的HTML表格中抓取准确的字段?

在Python中添加期货之间的延迟

在Python中使用readline函数时如何向下行

如何使用bs 4从元素中提取文本

强制venv在bin而不是收件箱文件夹中创建虚拟环境

Python中MongoDB的BSON时间戳

Python 3.12中的通用[T]类方法隐式类型检索

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

rame中不兼容的d类型

有症状地 destruct 了Python中的regex?

Polars:用氨纶的其他部分替换氨纶的部分

如何在UserSerializer中添加显式字段?

如何在图中标记平均点?

不能使用Gekko方程'

Pandas GroupBy可以分成两个盒子吗?

Pandas Data Wrangling/Dataframe Assignment

如何使用Numpy. stracards重新编写滚动和?

try 检索blob名称列表时出现错误填充错误""