Python:将图片二值化并填充形状

时间:2018-07-23 22:55:55

标签: python image image-processing machine-learning computer-vision

我正在尝试测量两张图像 [ab]之间的相似性,其中之一完全曝光不足:

enter image description here

我以为可以对第二张图像进行二值化处理,使其看起来与第一张图像更加相似,但是第二张图像似乎在叶子中根本没有太多强度,因为下面的二值化代码使这些图像基本保持不变:

from scipy.misc import imread, imsave
from skimage.transform import resize
from glob import glob

size = 255
a = imread('a.jpg', mode='L')
b = imread('b.jpg', mode='L')
a = resize(a, (size, size))
b = resize(b, (size, size))

# specify a threshold 0-1
threshold = 0.8

# make all pixels < threshold black
a_binarized = 255.0 * (a > threshold)
b_binarized = 255.0 * (b > threshold)

imsave('a_binarized.jpg', a)
imsave('b_binarized.jpg', b)

有人知道我如何操纵第二张图像以使其看起来像第一张吗?他人在此问题上提供的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用高通滤镜获取图像轮廓,然后进行比较。例如,您可以使用sobel过滤器:

    from scipy import ndimage, misc
    import matplotlib.pyplot as plt
    from sklearn.metrics import mean_squared_error

    image1 = ndimage.sobel(image1) 
    image2 = ndimage.sobel(image2)

    print(mean_squared_error(image1, image2)) # difference between them

之所以起作用,是因为较高的频率位于图像边缘,因此,通过应用高通滤波器,可以保留这些高频并衰减最低的频率。由于图像具有相同的边界,因此您可以比较它们并获得较高的相似度(或较低的均方误差)