我正在尝试测量两张图像 [a,b]之间的相似性,其中之一完全曝光不足:
我以为可以对第二张图像进行二值化处理,使其看起来与第一张图像更加相似,但是第二张图像似乎在叶子中根本没有太多强度,因为下面的二值化代码使这些图像基本保持不变:
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)
有人知道我如何操纵第二张图像以使其看起来像第一张吗?他人在此问题上提供的任何帮助将不胜感激。
答案 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
之所以起作用,是因为较高的频率位于图像边缘,因此,通过应用高通滤波器,可以保留这些高频并衰减最低的频率。由于图像具有相同的边界,因此您可以比较它们并获得较高的相似度(或较低的均方误差)