如何通过脚本合并DM中的2个RGB图像?

时间:2016-06-02 23:34:08

标签: image-processing rgb dm-script

我想通过脚本在Digital Micrograph中叠加2个(或更多)RGB图像。

与一些没有颜色的真实图像不同,可以通过对强度求和来合并,RGB图像应该以另一种方式合并,但我不知道。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以像常规图像一样对RGB图像求和,但问题是您需要通过“叠加”来定义您的意思。

RGB图像是三个像素,为3个通道RED,GREEN,BLUE中的每个通道保存一个值,这些值在[0和255]之间被剪切。

“求和”RGB图像将再次为您提供三元组,但任何大于255的值都会被截断为255,因此您将在图像中越来越多地转向“白色”。

您可以将“叠加”定义为平均值,但“叠加”的效果会越来越趋向于“平均灰度”。

或者您可以将“叠加”定义为所涉及频道的“最大值”或“最小值”。

或者,或者......或者......

当你想到“覆盖”RGB图像时,想到像Photoshop这样的其他图形程序可以组合“图层”是有帮助的。通常这些程序为您提供多种选择(“叠加,屏幕,变亮,变暗,您可以命名......”),这些选项都定义了第一个和第三个颜色值之间的不同数学关系第二层的颜色值。

执行此数学运算所需的命令包括RGB( )RED( )GREEN( )BLUE( )以及简单的数学运算。参见示例:

image img1r := RealImage("Red 1",4,256,256)
image img1g := RealImage("Green 1",4,256,256)
image img1b := RealImage("Blue 1",4,256,256)

img1r = icol/iwidth * 256
img1b = iradius/iwidth * 256
img1g = irow/iwidth * 256

RGBImage img1 = RGB(img1r,img1g,img1b)
img1.Setname( "Image 1 (RGB)")

image img2r := RealImage("Red 2",4,256,256)
image img2g := RealImage("Green 2",4,256,256)
image img2b := RealImage("Blue 2",4,256,256)

img2r = (icol%10)<5 ? 256 : 100
img2g = (irow%10)<5 ? 256 : 100
img2b = (iradius%10)<5 ? 256 : 100
RGBImage img2 = RGB(img2r,img2g,img2b)
img2.Setname( "Image 2 (RGB)")

image sumImg = img1 + img2
sumImg.SetName( "SUM" )

image avImg = (img1 + img2)/2
avImg.SetName( "AVERAGE" )

image maxImg = RGB( max(red(img1),red(img2)), max(green(img1),green(img2)), max(blue(img1),blue(img2)))
maxImg.SetName( "Channel MAX" )

image minImg = RGB( min(red(img1),red(img2)), min(green(img1),green(img2)), min(blue(img1),blue(img2)))
minImg.SetName( "Channel MIN" )


// Arrange display
EGUPerformActionWithAllShownImages( "delete" )

minImg.ShowImage()
maxImg.ShowImage()
avImg.ShowImage()
sumImg.ShowImage()
img2.ShowImage()
img1.ShowImage()

TagGroup layout = SLMCreateGridLayout( 2 , 3 )
EGUArrangeAllShownImagesInLayout( layout )

Output

还应注意,某些“叠加”组合不是基于红色/绿色/蓝色(RGB)颜色模型,而是基于替代色调/饱和度/亮度(HSB)颜色模型。

DigitalMicrograph脚本本身只支持RGB,但你可以自己做数学。

您可能还会发现查看Display as HSB.s网站上的示例脚本“Gatan script example”非常有用。

答案 1 :(得分:1)

您可以使用安装在大多数Linux发行版上的 ImageMagick 非常简单地编写图像合并脚本,并且可用于OSX和Windows。

由于你没有提供任何样本图片,我已经做了一对 - image1.pngimage2.png这样:

enter image description here enter image description here

现在,有很多混合模式可用 - 一些比较常见的 Lighten Darken Overlay < / em>, Blend 。所以,让我们在终端的命令行尝试一些:

convert image1.png image2.png -compose darken -composite result.png

enter image description here

convert image1.png image2.png -compose lighten -composite result.png

enter image description here

convert image1.png image2.png -compose overlay -composite result.png

enter image description here

选项是无穷无尽的 - 你可以得到ImageMagick中可用的混合模式列表,如下所示:

identity -list compose

<强>输出

Atop
Blend
Blur
Bumpmap
ChangeMask
Clear
ColorBurn
ColorDodge
Colorize
CopyBlack
CopyBlue
CopyCyan
CopyGreen
Copy
CopyMagenta
CopyOpacity
CopyRed
CopyYellow
Darken
DarkenIntensity
DivideDst
DivideSrc
Dst
Difference
Displace
Dissolve
Distort
DstAtop
DstIn
DstOut
DstOver
Exclusion
HardLight
HardMix
Hue
In
Lighten
LightenIntensity
LinearBurn
LinearDodge
LinearLight
Luminize
Mathematics
MinusDst
MinusSrc
Modulate
ModulusAdd
ModulusSubtract
Multiply
None
Out
Overlay
Over
PegtopLight
PinLight
Plus
Replace
Saturate
Screen
SoftLight
Src
SrcAtop
SrcIn
SrcOut
SrcOver
VividLight
Xor

以下是所有选项:

enter image description here