使用 Imagemagick 将 RAW 转换为 PNG
Posted
技术标签:
【中文标题】使用 Imagemagick 将 RAW 转换为 PNG【英文标题】:Convert RAW to PNG with Imagemagick 【发布时间】:2020-06-14 22:00:17 【问题描述】:我正在尝试使用 Imagemagick 将 RAW 图像转换为 PNG。 我使用的 Imagemagick 版本是 6.7.8-9。
要转换的RAW图像是:
https://drive.google.com/file/d/1V1c-ytjkLaCM3KbAc6Yxj2nfWzNkYohc/view?usp=sharing
我的客户给了我一张包含 1000 多张 RAW 图像的大 RAW 图像,它是从 Dicom 生成的。首先,我使用命令只裁剪了一张图像(裁剪命令无法正常工作,因此使用了转换):
convert -size 512x512 -depth 16 UYVY:original.raw result.raw
result.raw 在 ImageJ 上看起来不错。 现在,我不知道如何从中获取 PNG。 我测试了一些命令:
这个产生了一个非常糟糕的质量:
convert -size 512x512 -depth 16 gray:result.raw result.png
这张图片是绿色的:
convert -size 512x512 -depth 16 uyvy:result.raw result.png
如果我在 ImageJ 上打开 result.raw 并保存为 PNG,它可以完美运行。
【问题讨论】:
正确的结果是什么样的?从 ImageJ 发布屏幕快照,显示正确的结果。您的原始数据是有符号还是无符号 16 位? 试试convert -size 512x512 -depth 16 uyvy:result.raw -separate +channel result.png
并选择您认为最好的频道。
@fmw42 感谢您的回复。您的命令会生成更好的图像,但它们看起来仍然与原始 RAW 图像不同。这是从您的命令生成的 PNG 之一:link 这个 PNG 是从 ImageJ 创建的,这是我需要的:link 我的 RAW 是 16 位签名的。我的客户刚刚告诉我 RAW 是 1ch(mono),所以应该转换为 3ch(rgb) 灰色,然后再转换为 PNG。那么 PNG 就不会是一种奇怪的颜色了。
我认为问题在于 ImageMagick 正在处理为无符号 16 位并且您的数据已签名。我不知道 ImageMagick 是否可以处理签名数据。您应该在 ImageMagick 论坛上询问是否有读取签名的原始图像数据的方法。
实际上,我的客户说 RAW 应该在 ImageJ 上以“16bit signed and little endian”打开。所以,正确的图像应该是这样的:link 现在,问题是如何添加“签名”和“小端”。我尝试了类似convert -size 512x512 -depth 16 -define png:swap-bytes=on -define signed uyvy:result.raw result.jpg
的方法,但没有成功。
【参考方案1】:
我从 Imagemagick 社区得到了答复。首先,下面从原始原始图像中获取第一张图像的代码是错误的。
convert -size 512x512 -depth 16 UYVY:original.raw result.raw
这是正确的方式(512*512*2bytes=524228)
head --bytes 524288 original.raw >firstimage.raw
然后转换成PNG:
magick -size 512x512 -depth 16 gray:firstimage.raw -evaluate AddModulus 50% -auto-level x.png
【讨论】:
【参考方案2】:这是 ImageMagick 中的另一种方式,我认为它对您的签名原始数据更直观。我只是指定使用-define quantum-format=signed
对数据进行签名。然后使用-auto-level
将结果拉伸到全动态范围。
convert -size 512x512 -depth 16 -define quantum:format=signed gray:original.raw -auto-level result.png
如果使用 ImageMagick 7,则将 convert 替换为 magick。
【讨论】:
以上是关于使用 Imagemagick 将 RAW 转换为 PNG的主要内容,如果未能解决你的问题,请参考以下文章