如何以编程方式计算图像的(相对)复杂度?
Posted
技术标签:
【中文标题】如何以编程方式计算图像的(相对)复杂度?【英文标题】:How to calculate (relative) complexity of images programmatically? 【发布时间】:2021-09-10 00:05:30 【问题描述】:我已经彻底搜索了互联网,但没有太多相关问题。即使在***上也没有
所以我想要达到的目标是相当困难的事情
我想计算图像的复杂度
让我给你看几个我开发的游戏的例子https://www.monstermmorpg.com/MonsterDex
我有一个非常复杂和非常详细的怪物艺术品,例如
https://www.monstermmorpg.com/Vesuverex-Monster-Dex-18
还有一个非常简单的
https://www.monstermmorpg.com/Cluckoon-Monster-Dex-152
所以我想计算图像的复杂度。
我想计算平面颜色复杂度、多线复杂度、良好的光线复杂度以及是否还有其他复杂度。由于具有各种图像复杂性,我将对图像进行排序并决定哪一个最适合我的目标。
那我为什么需要?当我使用 ImageMagick 调整它们的大小时,我将根据图像的复杂性应用过滤器,例如 unsharp
选项
它在边框的锯齿上有很大的不同
我想用 C# 计算图像的复杂度
我愿意使用第三方库等
【问题讨论】:
“我希望你明白我的复杂性是什么意思”。不,我们没有。你能从数学上描述它是什么吗? “平面颜色”复杂吗?是“多行”的复杂性吗?是“好光”的复杂性吗?其中一些超级容易计算,有些则不然 @AnderBiguri 更新了我的问题,请再次查看 您可以使用标准差作为衡量标准。 @fmw42 我测试了标准差,结果很差 计算 Canny 边。然后得到整个图像的局部平均值。然后得到结果的平均值 【参考方案1】:人们经常使用entropy 作为场景复杂度的衡量标准。使用libvips,获取直方图并从中计算熵:
$ vips hist_find chicken.png x.v
$ vips hist_entropy x.v
5.048871
$ vips hist_find dino.jpg x.v
$ vips hist_entropy x.v
7.574827
你可以看到你的恐龙形象要高得多。 libvips 在 nuget 上有 a nice C# binding --- 你会写类似(未经测试)的东西:
using var im = Image.NewFromFile("image.jpg", access: Enums.Access.Sequential);
double entropy = im.HistFind().HistEntropy();
【讨论】:
以上是关于如何以编程方式计算图像的(相对)复杂度?的主要内容,如果未能解决你的问题,请参考以下文章
将图像组合成音频文件并以编程方式在android中制作视频文件