- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有没有一种比较可靠的方法来比较相同格式和相同分辨率的图像并获得它们之间的差异?
在最佳情况下,我正在寻找可以比较的图像数值表示形式,因为我必须比较许多图像。
最佳答案
您可以使用ImageMagick的compare
命令执行此操作。
(如果您成功使用了命令行,则可以继续使用ImageMagick的API之一:这些API尤其适用于C
('MagickWand'),C++
('Magick++'),Java
('JMagick') ,LISP
('L-Magick'),.NET
('Magick.NET'),Perl
('PerlMagick'),PHP
('IMagick'),Python
('PythonMagick')和Ruby
('RMagick')。-然后在您自己的应用程序中实现相应的功能。)
唯一的要求是:图像需要在宽度和高度上具有相同的尺寸(以像素数衡量)。因此,您甚至不需要与您假设的相同的格式。
差异可以通过不同的方式返回:
compare \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/D9IAV.jpg \
delta1.pdf
compare
命令中最简单的命令到底做了什么?
-highlight-color blue
和
-lowlight-color yellow
或任何其他颜色定义)
compare \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/D9IAV.jpg \
-fuzz 2.5% \
delta2.png
-compose src-over
。
convert -list compose
将为我们枚举它们!这是完整的列表-它在我的系统上包含67个不同的列表:
Atop Blend Blur Bumpmap ChangeMask Clear ColorBurn ColorDodge Colorize CopyBlack CopyBlue CopyCyan CopyGreen Copy CopyMagenta CopyOpacity CopyRed CopyYellow Darken DarkenIntensity DivideDst DivideSrc Dst Difference Displace Dissolve Distort DstAtop DstIn DstOut DstOver Exclusion HardLight HardMix Hue In Lighten LightenIntensity LinearBurn LinearDodge LinearLight Luminize Mathematics MinusDst MinusSrc Modulate ModulusAdd ModulusSubtract Multiply None Out Overlay Over PegtopLight PinLight Plus Replace Saturate Screen SoftLight Src SrcAtop SrcIn SrcOut SrcOver VividLight Xor
for i in $(convert -list compose|tr "\n" " "); do \
compare \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/D9IAV.jpg \
-compose ${i} \
delta-${i}.png ; \
done
-compose Difference
-compose DivideSrc
-compose CopyBlue
-compose MinusDst
-compose Hue
-compose LightenIntensity
compare \
-metric rmse \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/D9IAV.jpg \
null:
rmse
是均方根误差的首字母缩写。以上示例图像的结果为:
1339.53 (0.02044)
compare -list metric
AE Fuzz MAE MEPP MSE NCC PAE PHASH PSNR RMSE
AE absolute error count, number of different pixels (`-fuzz` effected)
FUZZ mean color distance
MAE mean absolute error (normalized), average channel error distance
MEPP mean error per pixel (normalized mean error, normalized peak error)
MSE mean error squared, average of the channel error squared
NCC normalized cross correlation
PAE peak absolute (normalized peak absolute)
PHASH perceptual hash
PSNR peak signal to noise ratio
RMSE root mean squared (normalized root mean squared)
phash
(“感知哈希”)。它是唯一一张不需要两个比较图像相同尺寸的图像。最好是在命令行和程序上缩小看起来相似的图像(或至少可靠地排除看起来非常不同的这些图像对)而不真正“看它们”的最佳“度量”。
for i in $(compare -list metric); do \
compare \
-metric $i \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/GBax7.png \
null: \
done
AE : 0
Fuzz : 0 (0)
MAE : 0 (0)
MEPP : 0 (0, 0)
MSE : 0 (0)
NCC : 1.00001
PAE : 0 (0)
PHASH : 0
PSNR : inf
RMSE : 0 (0)
0
,除了两个:PSNR返回
infinity
,而NCC返回
1.00001
。
for i in $(compare -list metric); do \
compare \
-metric $i \
-size 100x100 \
xc:white \
xc:black \
null: \
done
AE : 10000
Fuzz : 65535 (1)
MAE : 65535 (1)
MEPP : 1.96605e+09 (1.00003, 1)
MSE : 65535 (1)
NCC : 0
PAE : 65535 (1)
PHASH : 417.941
PSNR : 0
RMSE : 65535 (1)
AE
指标符合预期:10000个像素(来自
-size 100x100
)不同。一旦您
read up and grokked各自的度量标准定义意味着什么,大多数其他结果也将易于理解。
for i in $(compare -list metric); do \
compare -metric $i \
http://i.stack.imgur.com/GBax7.png \
http://i.stack.imgur.com/D9IAV.jpg \
null: \
done
AE : 74200
Fuzz : 1339.53 (0.02044)
MAE : 499.997 (0.00762946)
MEPP : 2.07206e+08 (0.000417654, 0.435294)
MSE : 27.3801 (0.000417793)
NCC : 0.99709
PAE : 28527 (0.435294)
PHASH : 0.745389
PSNR : 33.7904
RMSE : 1339.53 (0.02044)
关于c# - 我们可以以编程方式比较具有相同分辨率的不同图像吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974945/
我正在使用 JavaFX 开发视频播放器。我正在将视频从本地文件系统加载到 JavaFX 类媒体中。然后我想获取宽度和高度,以便我可以将场景的尺寸设置为该大小: Media media = new M
我是OpenCV的新手,正在尝试解决这个问题。我有一个.mp4文件保存在从网络摄像头流式传输的磁盘上。现在,我需要制作视频的低分辨率版本,以上传到Web服务器(这个想法是,低分辨率预览实时或多或少地上
我在我的应用程序中使用 jfree 图表(折线图)...创建时我的图表看起来很模糊...我怎样才能获得高清晰度图像。 我使用过:ChartUtilities.writeScaledChartAsPNG
我正在用 Java 编写一个工具来处理我网站上上传的文件。我想以特定的方式管理图像:如果尺寸大于限制,我想首先调整图像的尺寸,然后再次检查尺寸。当然,我不想做无用的工作,所以我想在调整图像大小之前估计
是否有一种纯 WPF 方法来获取有关所有可用显示器大小(分辨率)的信息。我知道我可以使用 Screen.AllScreens 来获取它们,但在我的遗留项目中我无法添加新的引用(内置 WPF 程序集除外
看了Developer文档,部分理解了LDPI,HDPI,MDPI,XHDPI类比,网上到处找也没有找到具体答案。 我有两部手机,一部是小屏幕,一部是平板电脑。我希望我的小屏幕手机上的按钮看起来很小,
对于下面给定的网页, xyz {% load staticfiles %} html, body {
我在 Mac 上使用多个 JFrames 制作了一个程序,分辨率还可以,一切都适合屏幕。但是,当我在我的 PC 上运行该程序时,JFrames 太大并且会立即离开屏幕。 我的问题是:是否可以在 JFr
我需要有关如何检索屏幕分辨率的帮助,如下图所示。 我找到了 this documentation这真的很有帮助。这是我根据这些文档尝试的代码: int numberOfScreens = GetSys
有什么方法可以更改分辨率或为亚马逊 Kindle 键盘上的屏幕设置不同的边界?我的屏幕有一部分出现裂纹,我想解决这个问题。 我试过在文件系统中乱搞(通过 WiFi 连接),但我的所有属性更改都没有任何
快速提问, 我正在开发 libgdx 中的游戏,但遇到了问题。我正在尝试扩展我的 Assets ,我正在使用 Gdx.graphics.getDensity() 来获取密度,然后使用它作为乘数来设置我
我有一些关于屏幕分辨率的问题,我不清楚。这些问题假设我的应用程序将在 iOS 4.0 及更高版本以及 iPhone 3GS 或 iPhone 4 上运行。 启动图像 (default.png) 的大小
我们有一个应用程序在审核过程中被 Apple 应用程序审核人员拒绝。拒绝的原因是应用程序在 Ipad 上运行时无法正确缩放。 该应用程序本来就不是要在 Ipad 上运行的,但与他们争论这一点似乎没有意
我试图在不解码文件的情况下获取 JPEG 图像的分辨率。我从互联网上获得了几个样本,但没有一个可以正常工作。似乎是这样,因为许多 JPEG 文件不是标准的,尽管任何图形应用程序(Irfan、PSP、F
我尝试了很多事情,但是所有尝试都失败了。 我需要将灰度图像(2560x1440)调整为更低或更高的分辨率,然后我需要将边界设置为原始大小(2560x1440),但将调整后的图像保持在中心。 我使用的是
我正在使用 GLSulfaceView 开发一个静音相机应用程序,该应用程序从预览中捕获图片。 为了捕捉图片,我使用 GLES20.glReadPixels(0, 0, surfaceWidth, s
是否有相当于 yarn resolutions 的 npm功能? npm package.json docs 中没有提及它. 例如,我想在 3.3.2 上安装 lerna@3.3.2 及其依赖项之一
我制作了一个在 Arduino 上运行的 24x15 LED 显示屏,去年我在内存中放入了 32KB 的图形例程,这很酷。 但现在我已经升级到 Arduino Mega,具有 256KB 内存,并且有
我的场景是,我正在收集网络数据包,如果数据包与网络过滤器匹配,我想记录连续数据包之间的时间差,最后一部分是不起作用的部分。我的问题是,无论我使用什么 C 定时器函数,我都无法获得准确的亚秒级测量。我尝
我们一直在学校布置一项任务,需要更改图像(反转颜色、切换颜色、旋转 90 度、双倍大小、放大图像),现在我正在尝试通过将分辨率加倍来使其大小加倍,但无法弄清楚如何访问该地址并更改它。我们得到了两个函数
我是一名优秀的程序员,十分优秀!