我想并行化一个同时使用两个程序的图像处理步骤。我的代码对于单个图像可以正常工作,但是当我尝试对其进行并行化时,它将失败。
我正在使用的两个程序分别是USGS成像仪和光谱仪集成软件中的fx
和getkey
。我使用fx
对输入图像(在下面的代码中为“ f1”)执行算术运算,并将其写入新文件(即“ to”参数)。 getkey
输出所请求关键字的值,在这种情况下为数字。
在下面的代码中,我从输入图像f1中减去getkey
的输出,并将结果写入到新文件中,该文件由'to'参数定义。此代码可以正常运行:
fx f1=W1660432760_1_overclocks_average_lwps5.cub to=testing_fx2.cub equation=f1-$(getkey from=W1660432760_1_overclocks_average_lwps5_stats.txt grpname=results keyword=average)
当我尝试并行化时,问题就来了。以下代码给出了错误,提示“无法打开[{2}]”。
parallel fx f1={1} to={1.}_minus_avg.cub equation=f1-$(getkey from={2} grpname=results keyword=average) ::: $(find *lwps5.cub) ::: $(find *stats.txt)
我期望的结果是输出图像,其像素值比输入图像小getkey
值。
答案 0 :(得分:1)
如果应该以两种方式组合两个输入:
parallel fx f1={1} to={1.}_minus_avg.cub 'equation=f1-$(getkey from={2} grpname=results keyword=average)' ::: *lwps5.cub ::: *stats.txt
如果两个输入应该链接:
parallel fx f1={1} to={1.}_minus_avg.cub 'equation=f1-$(getkey from={2} grpname=results keyword=average)' ::: *lwps5.cub :::+ *stats.txt
如果这些方法都不能解决您的问题,请制作一个包含2个参数的shell函数:
doit() {
arg1="$1"
arg2="$2"
# Do all your stuff with getkey and fx
}
export -f doit
# all combinations
parallel doit ::: *lwps5.cub ::: *stats.txt
# or linked
parallel doit ::: *lwps5.cub :::+ *stats.txt