我有两个相同大小的rgb图像,我想计算一个相似性度量。从欧几里得思想出发:
import scipy.spatial.distance as dist
import cv2
im1 = cv2.imread("im1.jpg")
im2 = cv2.imread("im2.jpg")
>> im1.shape
(820, 740, 3)
>> dist.euclidean(im1,im2)
ValueError: Input vector should be 1-D.
我知道dist.euclidean
需要一个一维数组,im1
和{im1
和{
你可以试试
您可以对这两个图像使用“重塑”功能将它们从3D转换为1D
灰度解(?)
(下面讨论了您对“保留图像中的信息”功能的评论)
在我看来,你也许可以用灰度图像而不是RGB图像来解决这个问题。我知道我在做假设,但这是个想法。在
我将尝试一个与代码相关的简单示例,然后给出一个使用2D离散傅立叶变换的图像相似性度量示例,该变换使用灰度转换。DFT分析将有自己的部分
(如果你在过程中看到这个,我很抱歉。我只是想确保我的工作得以保存。)
基于我的假设,我将尝试你的方法来处理一些RGB图像,然后看看是否可以通过转换为灰度来解决这个问题。如果用灰度来解决这个问题,我们可以通过使用所有三个通道的组合来找到图像的相似性,从而分析灰度解决方案带来的信息损失量,每个通道分别进行比较。在
方法
确保我有所有的库/包/任何你想叫它们的东西。在
注意,在这个试验中,我使用了一些PNG图像,这些图像是在尝试使用2ddft时创建的(如下所述)。在
确保我遇到同样的问题
^{pr2}$现在,让我们尝试使用灰度。如果这个方法有效,我们可以简单地找到每个RGB通道的距离。我希望它能起作用,因为我想做信息丢失分析。在
我们转换成灰度:
一个简单的
dist.euclidean(im1_gray, im2,gray)
将导致相同的ValueError: Input vector should be 1-D.
异常,但我知道灰度图像数组(像素行数组)的结构,因此我执行以下操作。在顺便说一下,这是两张原始图片:
灰度工作(按摩),让我们试试颜色
按照这个SO-answer中的一些过程,让我们执行以下操作。在
信息保存
在分析here之后,让我们看看我们的信息丢失。(请注意,这将是一个非常幼稚的分析,但我想对此进行分析。在
灰度与颜色信息
让我们看看颜色和灰度。稍后,我们可以看看我们是否保存了关于距离的信息。在
使用灰度和所有三个通道比较不同距离测量值-使用一组图像的距离和比率。
我不知道如何对距离进行熵测量,但我的直觉告诉我,如果我使用灰度和颜色通道计算距离,如果我没有丢失任何信息,我应该得出相似的距离比率。在
当我看到这个问题时,我的第一个想法是使用二维离散傅立叶变换,我确信在Python、NumPy或OpenCV中都有。基本上,DFT的第一个组成部分将与图像中的大图形相关。(这里是我将发表的相关研究论文:link。我没有看得太近——欢迎任何人推荐另一个。)
所以,让我从Python中查找一个二维DFT,然后我将继续编写一些工作代码。在
(如果你在过程中看到这个,我很抱歉。我只是想确保我的工作得以保存。)
首先,您需要确保您有}。似乎您有
PIL
Pillow
和{NumPy
,但这里有一些说明。(请注意,我现在使用的是Windows操作系统)。。。在现在,这里有5张图片-
1)犀牛形象,
rhino1_clean.jpg
(source)同一张图片,上面有我在画作中画的黑色条纹,
rhino1_streak.jpg
另一个犀牛形象,
rhino2_clean.jpg
(source)第一个河马伊玛锗
hippo1_clean.jpg
(source)第二个河马图像,
hippo2_clean.jpg
(source)。在{a13}
所有图片都是合理使用的。在
让我们进一步演示Python终端。在
>python
首先,如果我们使用灰度的PNG图像,生活会更轻松-PNG是因为它是一个直截了当的位图(而不是压缩的图像),灰度是因为我不必显示通道的所有细节。在
对其他四个图像执行类似的步骤。我使用了PIL变量名,
rh_img_1_stk
,rh_img_2_cln
,hp_img_1_cln
,hp_img_2_cln
。我得到了以下灰度图像的图像文件名,我将进一步使用这些文件名:rhino1_streak_gs.png
,rhino2_clean_gs.png
,hippo1_clean_gs.png
,hippo2_clean_gs.png
。在现在,让我们得到DFT的系数。下面的代码(ref.this SO answer)将用于第一个干净的rhino图像。在
让我们先“看看”图像数组。这将向我们展示左上栏的网格版本,较高的值为白色,较低的值为黑色。在
注意,在我开始输出这个数组之前,我将设置为
numpy
默认值,参见https://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html现在,让我们运行DFT并查看结果。在开始实际的转换之前,我更改了
numpy
打印选项,使事情变得更好。在现在,使用
rhino1_streak.jpg
执行相同过程的结果我将打印\增量值,而不是执行更全面的距离。如果需要距离,可以将此处显示的值的平方和。在
我将只放置三个长度为5的系数数组,以展示这种方法在显示图像相似性方面的工作原理。老实说,这对我来说是个实验,所以我们看看会怎么样。在
您可以将这些系数与距离或其他指标进行比较。在
有关信息保存的更多信息
让我们用上述方法对信息丢失进行信息理论分析。 在分析here之后,让我们看看我们的信息丢失。在
祝你好运!在
相关问题 更多 >
编程相关推荐