如何以编程方式计算图像的(相对)复杂度?

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();

【讨论】:

以上是关于如何以编程方式计算图像的(相对)复杂度?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到图像处理算法的计算复杂度

Xamarin 以编程方式在底部形成垂直对齐图像

将图像组合成音频文件并以编程方式在android中制作视频文件

第十九天学习进度--简单线性函数提取并模拟计算机复杂图像识别函数

在 UIView 中动画图像

研究论文 | 探究图像识别教学中的计算思维培养方式