【发布时间】:2017-08-10 20:48:13
【问题描述】:
我在学校做过一个项目,我必须将物体分为猫和狗。我使用 SVM 和逻辑回归来实现这一点。
图像以特征的形式提供给我们。所以我们不必处理图像居中之类的事情......
我的问题是,如何将所有图像居中,以便我的分类器能够更好地学习?我知道 CNN 对此很有用,但我想知道在分类之前如何将图像居中?
谢谢!
【问题讨论】:
标签: image image-processing machine-learning
我在学校做过一个项目,我必须将物体分为猫和狗。我使用 SVM 和逻辑回归来实现这一点。
图像以特征的形式提供给我们。所以我们不必处理图像居中之类的事情......
我的问题是,如何将所有图像居中,以便我的分类器能够更好地学习?我知道 CNN 对此很有用,但我想知道在分类之前如何将图像居中?
谢谢!
【问题讨论】:
标签: image image-processing machine-learning
我不知道这是否是最好的解决方案,但是您可以尝试找到对象的中心,然后移动图像,使对象的中心成为图像的中心。
一步一步:
findContours 之类的函数。但这是最难的部分,它真的取决于你的形象,可能需要更先进的技术。moments 找到它,也可以使用 Centroid 方法手动计算warpAffine 或使用 Affine Transform 手动计算
我在 OpenCV 文档中找到了第 1 步和第 2 步的不错教程:
http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/moments/moments.html
【讨论】:
一种典型的方法是使用样本标准化/居中
img = cv.imread(image_path, 1)
# channel_wise centering :
img_mean = img.mean(axis=(1, 2))
img_std = img.std(axis=(1, 2))
img = np.subtract(img, img_mean.reshape(3, 1, 1))
img = np.divide(img, (img_std + 1e-4).reshape(3, 1, 1))
# OR
# full image centering
img_mean = img.mean()
img_std = img.std()
img = np.subtract(img, img_mean)
img = np.divide(img, img_std + 1e-4)
# Finally you cant set limit to lower and upper values of the image [-1, 1] range
img = np.clip(img, -1.0, 1.0)
【讨论】: