【问题标题】:Taking slices from several images and stitching them together从多个图像中获取切片并将它们拼接在一起
【发布时间】:2015-01-18 01:05:52
【问题描述】:

我有几张如下图所示:

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

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

到目前为止,我在 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 轴上切割几张图像并将它们缝合在一起?

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

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

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

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

    FinalImage = vertcat(FinalImage, C);
    

    【讨论】:

      【解决方案2】:

      就个人而言,我会在 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
      

      我将您的图像着色为红色、绿色和蓝色,并将其保存为 inR.pnginG.pnginB.png 3 次,然后运行脚本得到了这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-11
        • 2018-06-30
        • 1970-01-01
        • 1970-01-01
        • 2014-04-22
        • 2011-08-25
        • 1970-01-01
        • 2022-09-23
        相关资源
        最近更新 更多