0

我希望将 1500 万个 12.8 mb 索尼 .ARW 文件转换为 .jpg

我已经想出了如何在命令行上使用 sips 来做到这一点,但我需要对原始图像设置进行调整:对比度、高光、黑色、饱和度、自然饱和度,最重要的是去雾。我将对每张照片应用相同的设置。

如果我可以对如何合并 Dehaze 进行调整,似乎 ImageMagick 应该可以工作,但我似乎无法让 ImageMagick 工作。

我已经完成了比较 Lightroom Classic / Photoshop / Bridge / RAW Power / 和其他一些程序的基准测试。Raw Power 是迄今为止最快的(在 M1 Mac Mini 16GB Ram 上),但 Raw Power 不允许我一次处理多个文件夹。

我用 photoshop 做了很多脚本/动作——但在这种情况下,photoshop 是迄今为止最慢的选择。我相信这是因为它会打开每张照片。

4

1 回答 1

1

那是 200TB 的输入图像,甚至没有为输出图像留出任何存储空间。假设您每秒可以处理 1 张图像,这也是 24 小时/天处理的 173 天——我对此表示怀疑。

您可能想与 Fred Weinhaus @fmw42 谈谈他的Retinex脚本(在该页面上搜索“hazy”),它在去除雾霾方面做得相当出色。你的项目听起来很商业化。

在此处输入图像描述

© Fred Weinhaus - Fred 的 ImageMagick 脚本

如果/当你得到一个你想要的脚本时,我建议使用GNU Parallel来获得不错的性能。我还认为您可能需要考虑将 Fred 的算法移植或移植到 C++ 或 Python 以使用OpenCV而不是ImageMagick运行。

因此,假设您有一个 24 核 MacPro,以及一个以 Sony 图像名称为参数的bash脚本,您可以运行:ProcessOneARW

find . -iname \*.arw -print0 | parallel --progress -0 ProcessOne {}

这将在当前目录中递归查找所有 SonyARW文件并将它们传递到GNU Parallel,然后这将使所有 24 核保持忙碌,直到全部完成。您可以同时指定更少或更多的作业,例如,parallel -j 8 ...

注意 1:您还可以列出网络中其他服务器的名称,它也会将负载分散到它们之间。GNU Parallel能够将图像与作业一起传输到远程服务器,但我不得不质疑这样做是否有意义 - 您可能希望将图像的一个子集放在每个服务器上它自己的本地磁盘 I/O 并自己独立运行服务器,而不是从全球单点分布。

注意 2:您将希望您的磁盘配置良好,以处理多个并行 I/O 流。

注意 3:如果您确实编写了处理图像的脚本,请将其编写为接受多个文件名作为参数,然后您可以运行parallel -X,它将传递sysctl参数kern.argmax允许的尽可能多的文件名。这样,您就不需要bash每个图像的整个或 OpenCV C/C++ 进程。

于 2021-03-25T10:41:45.997 回答