从多张图片中截取切片并将它们拼接在一起

Taking slices from several images and stitching them together

我有几张图片,如下所示:

在所有图像中,两个条形图的位置始终位于 y 轴上的相同位置。它们只会改变强度。

我想在所有图像的 y-axis 上的某个高度处取一个像素行,将它们拼接在一起并显示生成的图像。

到目前为止,我在 Matlab 中有以下内容:

A = imread('image0000000351.pgm');
A = floor(A./16); % // transform back to 12 bit
[n m] = size(A);
B = A-400; % // remove background noise 
imagesc(B);

现阶段我有点迷茫。我将如何继续在 y-axis 上为多张图像切一片并将它们拼接在一起?

就我个人而言,我会在 shell 中在 Matlab 之外执行此操作,或者使用 system() 命令并让 ImageMagick 剪切图像条并将条条成一个整体。

因此,假设您想要从名称与 in*.png 匹配的所有图像文件的顶部开始扫描行 600 的 5 行,您可以这样做:

#!/bin/bash
# Edit these as you wish
NLINES=5        # Extract 5 lines from each image
YOFFSET=600     # ... starting at 600th scanline from top

for f in in*png
do
   echo Extracting line from $f
   convert "$f" -crop 0x${NLINES}+0+${YOFFSET} +repage "strip-$f"
done

echo Joining strips
convert strip* -append result.png

我将你的图像涂成红色、绿色然后蓝色,并将其保存了 3 次,分别是 inR.pnginG.pnginB.png 以及 运行 脚本,并得到了这个:

ImageMagick 对 PGM 文件同样满意 - 只需更改脚本中的扩展名即可。

要从图像中取出切片,您只需使用正常范围索引即可。假设多通道彩色图像,

C = B(startY:endY,:,:);

你不会说图像是否沿 X 轴对齐或是否需要调整,但如果它们已经对齐,你需要做的就是将每个新切片连接到最终切片图片。

FinalImage = vertcat(FinalImage, C);