【问题标题】:How to resize a tiff image with multiple channels?如何调整具有多个通道的 tiff 图像的大小?
【发布时间】:2019-09-22 06:57:45
【问题描述】:

我有一个大小为 21 X 513 X 513 的 tiff 图像,其中 (513, 513) 是包含 21 个通道的图像的高度和宽度。如何将此图像调整为 21 X 500 X 375?

我正在尝试使用 PILLOW 这样做。但无法弄清楚我是否做错了什么。

>>> from PIL import Image
>>> from tifffile import imread
>>> img = Image.open('new.tif')
>>> img

    <PIL.TiffImagePlugin.TiffImageFile image mode=F size=513x513 at 0x7FB0C8E5B940>

>>> resized_img = img.resize((500, 375), Image.ANTIALIAS)
>>> resized_img

    <PIL.Image.Image image mode=F size=500x375 at 0x7FB0C8E5B908>

>>> resized_img.save('temp.tif')

>>> img = imread('temp.tif')
>>> img.shape
  (500, 375)

频道信息在这里丢失。

【问题讨论】:

    标签: python deep-learning computer-vision image-resizing tiff


    【解决方案1】:

    您可以使用 OpenCV 调整图像大小。我能够使用以下代码调整 TIFF 格式图像的大小:

    import cv2
    
    file = "image.tiff"
    img = cv2.imread(file)
    print("original image size: ", img.shape)
    
    new_img = cv2.resize(img,(img.shape[1]-100,img.shape[0]-100))  # cv2.resize(image,(width,height))
    print("resized image size: ", new_img.shape)
    

    输出:
    原图尺寸:(512, 768, 3)
    调整后的图像大小:(412, 668, 3)

    Opencv 采用 INTER_LINEAR 作为默认插值方法。

    您可以通过提供附加参数来更改插值

    new_img = cv2.resize(img,(img.shape[1]-100,img.shape[0]-100),interpolation=cv2.INTER_AREA)
    

    在此处阅读有关可用插值方法的更多信息:https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize

    【讨论】:

    • 尝试使用opencv。但它给了我这个错误:cv2.imread('new.tif') [WARN:0] OpenCV TIFF: TIFFRGBAImageOK: 抱歉,无法处理带有 32 位样本的图像
    • 你能评论你的opencv代码吗?你也可以提供你的原始图像吗?我会尝试运行它。
    • 我打开的简历代码只有两行。尝试读取文件时失败。我想,这是因为我的图像中的通道数(即 21 而不是 3)。 >>> import cv2 >>> cv2.imread('2009_003961_SEG.tif') [WARN:0] OpenCV TIFF: TIFFRGBAImageOK: 抱歉,无法处理具有 32 位样本的图像
    • 看起来可能是opencv版本的问题。低于 3.4.5 的版本会出现某种错误。尝试升级它并尝试。
    【解决方案2】:

    尝试使用tifffilescikit-image

    from tifffile import imread, imwrite
    from skimage.transform import resize
    
    data = imread('2009_003961_SEG.tif')
    resized_data = resize(data, (375, 500, 21))
    imwrite('multi-channel_resized.tif', resized_data, planarconfig='CONTIG')
    

    comment98601187_55975161 中链接的文件 2009_003961_SEG.tif 不是多通道 513x513x21 图像。相反,该文件包含 513 个大小为 513x21 的图像。 tifffile 库将读取文件中的一系列图像并将其作为形状为 513x513x21 的 numpy 数组返回。

    要将 numpy 数组的大小调整为 375x500x21,请使用 skimage.transform.resize(或 scipy.ndimage.zoom)。单独调整 21 个通道的大小可能会更快。

    要使用tifffile 写入包含大小为375x500x21 的单个多通道图像的TIFF 文件,请指定planarconfig 参数。没有多少库或应用程序可以处理此类文件。

    【讨论】:

    • 感谢您的澄清。我不知道这一点“相反,该文件包含 513 个大小为 513x21 的图像。”
    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多