从多张图片中截取切片并将它们拼接在一起
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.png
、inG.png
和 inB.png
以及 运行 脚本,并得到了这个:
ImageMagick 对 PGM
文件同样满意 - 只需更改脚本中的扩展名即可。
要从图像中取出切片,您只需使用正常范围索引即可。假设多通道彩色图像,
C = B(startY:endY,:,:);
你不会说图像是否沿 X 轴对齐或是否需要调整,但如果它们已经对齐,你需要做的就是将每个新切片连接到最终切片图片。
FinalImage = vertcat(FinalImage, C);
我有几张图片,如下所示:
在所有图像中,两个条形图的位置始终位于 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.png
、inG.png
和 inB.png
以及 运行 脚本,并得到了这个:
ImageMagick 对 PGM
文件同样满意 - 只需更改脚本中的扩展名即可。
要从图像中取出切片,您只需使用正常范围索引即可。假设多通道彩色图像,
C = B(startY:endY,:,:);
你不会说图像是否沿 X 轴对齐或是否需要调整,但如果它们已经对齐,你需要做的就是将每个新切片连接到最终切片图片。
FinalImage = vertcat(FinalImage, C);