如何使用imagemagick模拟镜头色差?

如何使用imagemagick模拟镜头色差?,image,imagemagick,Image,Imagemagick,假设我有一张名为source.png的相机图像,我想分割通道,用不同的系数对每个通道进行仿射展开,然后在不创建中间文件的情况下重新组合成target.png 我正在尝试这样的事情: convert source.png-colorspace RGB-separate{expansions}-combine target.png 为了从imagemagick网站上获取提示,我做了很多小时的实验 从网络上的其他来源,但我没有得到它的工作 有人能给我举一个独立通道处理的简单例子吗 Mark Setch

假设我有一张名为source.png的相机图像,我想分割通道,用不同的系数对每个通道进行仿射展开,然后在不创建中间文件的情况下重新组合成target.png

我正在尝试这样的事情:

convert source.png-colorspace RGB-separate{expansions}-combine target.png

为了从imagemagick网站上获取提示,我做了很多小时的实验 从网络上的其他来源,但我没有得到它的工作

有人能给我举一个独立通道处理的简单例子吗

Mark Setchell给了我足够的实验和成功的基础! 答复:

convert Home.png-写入MPR:orig+delete\ \(MPR:orig-分离-删除1,2-仿射-1.00,0,0,-1.00,0,0-变换-重心-范围180x180\)\ \(MPR:orig-分离-删除0,2-仿射-1.06,0,0,-1.06,0,0-变换-重心-范围180x180\)\ \(MPR:orig-分离-删除0,1-仿射-1.31,0,0,-1.31,0,0-变换-重心-范围180x180\)\ -合并Home.imaffine.png
谢谢。

更新答案

由于我下面的原始答案似乎对你不起作用,也许你愿意尝试一下这个替代方法。我将加载您的图像一次,将其保存在
MPR
(内存程序寄存器)中,这是一个命名的RAM块,然后重新使用它来获取每个通道:

convert image.jpg -write MPR:orig +delete \
   \( MPR:orig -separate -delete 1,2 -affine <red transform>  \) \
   \( MPR:orig -separate -delete 0,2 -affine <green tranform> \) \
   \( MPR:orig -separate -delete 0,1 -affine <blue transform> \) \
   -combine result.jpg 

如果在将失真应用于各个通道后,您希望继续将运算符应用于所有通道,则可以使用
+通道
-通道RGB
确保后续运算符再次应用于所有通道。

经过多次试验后,我发现这种方法不起作用。仿射变换一次应用于所有通道。因此,我最终编写了一个python/scipy程序,实现了我想要的功能,包括应用每通道卷积内核。在阅读imagemagick管道文档之后,我可能想再试一次,以了解它的实际功能。我仍然希望imagemagick成为做这些事情的主要工具,所以如果有人想办法,请告诉我。哦!很抱歉等我回家后,我会向你建议一种不同的即时通讯方式。抱歉,第一个答案不正确!I don’我没有再试一次,也许你愿意试一试。也许有一种更简洁的方法来实现新答案的功能,所以请让我知道它是否能正常工作,如果能,我们可以使用更干净的版本。我很乐意使用ImageMagick进行广泛的变换。我对我的数学绝对有把握。我唯一不确定的是IM是否有能力为我完成它。我很高兴你有一个选择,你想让我试试。谢谢。我把正确答案放在问题中。马克·塞切尔提供的方向是关键。这个问题对马克·塞切尔来说已经够窄了。他的指导导致了所要求的解决方案。我在原来的问题中提出了这个解决办法。请移开货舱。
convert image.jpg -write MPR:orig +delete \
   \( MPR:orig -separate -delete 1,2 -affine <red transform>  \) \
   \( MPR:orig -separate -delete 0,2 -affine <green tranform> \) \
   \( MPR:orig -separate -delete 0,1 -affine <blue transform> \) \
   -combine result.jpg 
convert image.png -colorspace RGB       \
    -channel R -affine <RedTransform>   \
    -channel G -affine <GreenTransform> \
    -channel B -affine <BlueTransform>  \
    result.png