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)
如何进行无边框拼接和混合?
我参与了几个制作无缝图像马赛克的项目。您可能还需要考虑其他几个因素:
平场。用您的镜头和照明设置拍摄一张白卡,然后用它来拉平图像的亮度。我不知道 GM 是否有事情要做,@fmw42 会知道。平场图像特定于照明设置、镜头光圈设置、对焦设置和变焦设置,因此您需要在拍摄后锁定对焦/光圈/变焦。您需要在线性光下进行此校正。
镜头畸变。一些镜头,尤其是广角镜头,会引入明显的几何畸变。拍摄一张方格纸并检查所有线条是否平行。可以使用方格纸镜头自动生成可用于消除几何误差的镜头模型,但简单地选择失真低的镜头更容易。
分散。你是在移动物体还是相机?灯光也在移动吗?如果您移动对象,则可能会出现散射问题:对象的明亮部分在光线下移动时会将光线散射到黑暗区域。您需要建模并删除它,否则您会在较暗的区域看到接缝。
回转。您可以获得少量旋转,具体取决于您的平移阶段的工作方式以及您设置相机的仔细程度。您还可以在整个领域改变焦点。您可能会发现您也需要对此进行更正。
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)
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |