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

How to merge 2 RGB images in DM by scripting?

我想通过脚本在数码显微照片中叠加 2 个(或更多)RGB 图像。

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

感谢您的帮助!

您可以像常规图像一样对 RGB 图像求和,但您的问题是您需要定义 "overlay" 的含义。

RGB 图像是三元组,分别为红、绿、蓝 3 个通道保存一个值,这些值被剪裁在 [0 到 255] 之间。

"Summing" RGB 图像将再次为您提供一个三元组,但任何大于 255 的值都会被截断为 255,因此您将越来越向图像中的 "white" 偏移。

您可以将 "overlay" 定义为平均值,但 "overlaying" 的效果会越来越接近 "average gray"。

或者您可以将 "overlay" 定义为相关频道的 "max-values" 或 "min-values"。

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

当您想到 "overlaying" RGB 图像时,想到其他图形程序(如 Photoshop,它允许您组合 "layers" 会很有帮助。通常这些程序会为您提供多个选项 ( "overlay, screen, lighten, darken, you name it..." ),它们都定义了第一层的三个颜色值和第二层的三个颜色值之间的不同数学关系。

您需要执行此数学运算的命令是 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 )


还应注意,某些 "overlay" 组合并非基于 Red/Green/Blue (RGB) color model, but on the alternative Hue/Saturation/Brightness (HSB) 颜色模型。

DigitalMicrograph 脚本本身只支持 RGB,但您可以自己计算。

您可能还会发现查看示例脚本“Display as HSB.s" on the Gatan script example 站点。

很有用

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

由于您没有提供任何示例图片,我制作了一对 - image1.pngimage2.png 如下:

现在,有很多 混合模式 可用 - 一些更常见的是 LightenDarken 叠加混合。那么,让我们在终端的命令行中尝试一些:

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

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

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

选项是无穷无尽的 - 您可以像这样获得 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

以下是所有选项: