gpt4 book ai didi

python - 如何分割我的图像和标签,使其可以用作机器学习的特征?

转载 作者:行者123 更新时间:2023-11-30 08:55:57 25 4
gpt4 key购买 nike

我正在尝试执行像素分类,以使用机器学习(例如SVM、RandomForest等)执行图像分割。

通过使用图像的灰度值和 RGB 值并将每个像素与其真实值相关联,我设法获得了可接受的结果。为了避免发布完整的代码,以下是我在使用完整图像时制作特征和标签数组的方法:

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
feature_img = np.zeros((img.shape[0], img.shape[1], 4)) # container array, first three dimensions for the rgb values, and the last will hold the grayscale
feature_img[:, :, :3] = img
feature_img[:, :, 3] = img_gray
features = feature_img.reshape(feature_img.shape[0] * feature_img.shape[1], feature_img.shape[2])

gt_features = gt_img.reshape(gt_img.shape[0] * gt_img.shape[1], 1)

对于尺寸为 512*512 的图像,上面将给出形状为 [262144, 4] 的特征以及形状为 [262144, 4] 的随附 gt_feature, 1].

这为我提供了 sklearn.svm.SVCxy ,就像上面提到的那样,效果很好......但图像是非常嘈杂..由于 SVM 可以很好地处理更高维的数据,因此我打算通过将图像分割成窗口来探索这一点。

基于上面的代码,我想将尺寸为 [512, 1024] 的图像分割为尺寸为 [64*64] 的 block ,并使用它们进行训练支持向量机。按照上述格式,我编写了以下代码将图像分割成 block ,然后 .reshape() 将其转换为分类器所需的格式,但它没有按预期工作:

win_size = 64
feature_img = blockshaped(img_gray, win_size, win_size)
feature_label = blockshaped(gt_img, win_size, win_size)

# above returns arrays of shape [128, 64, 64]

features = feature_img.reshape(feature_img.shape[1] * feature_img.shape[2], feature_img.shape[0])
# features is of shape [4096, 128]

label_ = feature_label.reshape(feature_label.shape[0] * feature_label.shape[1] * feature_label.shape[2], 1)
# this, as expected returns ``[524288, 1]``

函数blockshape来自此处提供的答案:Slice 2d array into smaller 2d arrays

我想增加特征数据的维度的原因是因为众所周知,SVM 可以很好地处理更高维度的数据,并且还想看看基于 block 或补丁的方法是否有助于分割结果。

我将如何以可用于训练分类器的形式排列我已分解为窗口的数据?

最佳答案

我想了你的问题5个小时,并读了一些书来寻找答案!如果你正在进行分割,你的方法是完全错误的!当我们使用机器学习方法进行分割时,我们绝对不会改变任何像素位置。不仅在 SVM 中,而且在神经网络中,当我们接近分割时,我们不使用池化方法,甚至在 CNN 中,我们也使用相同的填充来避免像素移动。

关于python - 如何分割我的图像和标签,使其可以用作机器学习的特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60118832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com