使用带有混合的 GraphicsMagick 拼接图像

Nit*_*ena 2 imagemagick graphicsmagick

我必须使用 GraphicsMagick 拼接多个图块来创建单个图像。我目前正在使用 -convert 和 -mosaic 并有一些重叠来拼接瓷砖。但是缝合的图像在重叠的地方有边框。

以下是我正在使用的命令:

gm convert -background transparent 
-page "+0+0" "E:/Images/Scan 001_TileScan_001_s00_ch00.tif" 
-page "+0+948" "E:/Images/Scan 001_TileScan_001_s01_ch00.tif" 
-page "+0+1896" "E:/Images/Scan 001_TileScan_001_s02_ch00.tif" 
-page "+0+2844" "E:/Images/Scan 001_TileScan_001_s03_ch00.tif" 
-mosaic "E:/Output/temp/0.png"
Run Code Online (Sandbox Code Playgroud)

最终图像如下所示: 带有重叠边框的最终图像

如何进行无边框拼接和混合?

jcu*_*itt 5

我参与了几个制作无缝图像马赛克的项目。您可能还需要考虑其他几个因素:

  1. 平场。用您的镜头和照明设置拍摄一张白卡,然后用它来拉平图像的亮度。我不知道 GM 是否有事情要做,@fmw42 会知道。平场图像特定于照明设置、镜头光圈设置、对焦设置和变焦设置,因此您需要在拍摄后锁定对焦/光圈/变焦。您需要在线性光下进行此校正。

  2. 镜头畸变。一些镜头,尤其是广角镜头,会引入明显的几何畸变。拍摄一张方格纸并检查所有线条是否平行。可以使用方格纸镜头自动生成可用于消除几何误差的镜头模型,但简单地选择失真低的镜头更容易。

  3. 分散。你是在移动物体还是相机?灯光也在移动吗?如果您移动对象,则可能会出现散射问题:对象的明亮部分在光线下移动时会将光线散射到黑暗区域。您需要建模并删除它,否则您会在较暗的区域看到接缝。

  4. 回转。您可以获得少量旋转,具体取决于您的平移阶段的工作方式以及您设置相机的仔细程度。您还可以在整个领域改变焦点。您可能会发现您也需要对此进行更正。

libvips有一个用于制作无缝图像马赛克的函数包,包括上述所有功能。我为你做了一个例子:用这些源图像(绘画underdrawing的近红外图像):

在此处输入图片说明

进入:

$ vips mosaic cd1.1.jpg cd1.2.jpg join.jpg horizontal 531 0 100 0
Run Code Online (Sandbox Code Playgroud)

对文件进行水平连接join.jpg。这些数字给出了 100 像素的猜测重叠 - 马赛克程序将进行搜索并为您找到确切的位置。然后它使用升余弦进行羽化连接,以制作:

在此处输入图片说明

尽管图像已平场,但您可以看到连接。这是因为相机灵敏度随着物体的移动而变化。libvipsglobalbalance操作会自动拆开马赛克,为每一帧计算一组权重以最小化平均连接误差,然后重新组装它。

对于这对,我得到:

在此处输入图片说明

nip2是 libvips GUI,具有 GUI 界面的所有功能。手册中有一个章节(按F1查看)是关于拼装大图马赛克的:

https://github.com/jcupitt/nip2/releases

不幸的是,全局平衡不适用于 CLI,但它适用于任何 libvips 语言绑定(C#、Python、Ruby、JavaScript、C、C++、Go、Rust、PHP 等)。例如,在pyvips 中你可以这样写:

import pyvips

left = pyvips.Image.new_from_file("cd1.1.jpg")
right = pyvips.Image.new_from_file("cd1.2.jpg")
join = left.mosaic(right, "horizontal", 531, 0, 100, 0)
balance = join.globalbalance()
balance.write_to_file("x.jpg")
Run Code Online (Sandbox Code Playgroud)