如何调整具有多个通道的tiff图像的大小?

6

我有一张尺寸为 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)

通道信息在此处丢失。
2个回答

6

建议使用 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的图像。” - Damanpreet kaur

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位样本的图像。 - Damanpreet kaur
你能否在你的OpenCV代码中添加注释?同时,你能提供原始图像吗?我想在我的端上运行它。 - Deep
这是图片链接:https://drive.google.com/file/d/1695sC1AvQQDQ8k02Phog0YSg1rP_7xIz/view?usp=sharing - Damanpreet kaur
我的OpenCV代码只有两行。在尝试读取文件时失败了。我猜是因为我的图像通道数不对(即21而不是3)。
import cv2 cv2.imread('2009_003961_SEG.tif') [ WARN:0] OpenCV TIFF: TIFFRGBAImageOK: Sorry, can not handle images with 32-bit samples
- Damanpreet kaur
看起来可能是opencv版本的问题。低于3.4.5的版本会出现某种错误。尝试升级并重试。 - Deep
我正在使用的opencv版本是'4.1.0'。 仍然不起作用。 我现在已经通过分别对每个通道进行下采样,然后将它们堆叠在一起来解决问题。 - Damanpreet kaur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接