.tiff形式の画像をビジュアルpng、jpg、bmp、その他の形式に変換します(コードが添付されています)

現在一般的に使用されている .tiff 形式の画像は、png 形式の画像に変換されます。検索すると、ほとんどの画像はサードパーティのプラットフォームによって直接変換されますが、これにはメーターが必要です。実際にはその必要はありません。自分でコーディングすることで直接変換できます。

TIFF (Tagged Image File Format) は、主に写真やアートワークなどの画像を保存するために使用される柔軟なビットマップ形式です。これは元々、Aldus Corporation が Microsoft Corporation と協力して PostScript 印刷用に開発したものです。 TIFF は、JPEG および PNG に加わり、一般的な高ビット カラー画像形式として使用されます。 TIFF は、ファイル ヘッダーに「タグ」を含めることで、1 つのファイルで複数の画像とデータを処理できる、柔軟で適応性のあるファイル形式です。

1. .tiff形式の画像

Windows コンピュータで、コンピュータ ツールを使用して .tiff 形式の画像を直接開くと、白しか表示されません。これは、.tiff 形式の画像のピクセル値が 255 を超えているため、表示時に強制的に 255 表示に変換されるためです。 .tiff 形式の画像を選択するだけです。画像と表示されるピクセル値は次のとおりです。
ここに画像の説明を挿入します

ここに画像の説明を挿入します

写真の内容を視覚的に表示するには、png、jpg、bmp、その他の視覚的表示を正常に表示できるモニターに変換する必要があります。

2. tiffからpng、jpgコードへ

2.1 コード環境の準備

このコードを使用するには、Pytorch 環境が適切に実行されている必要があります。Pytorch のインストールについては、ブログ投稿を参照してください:Pytorch のインストール。 Pytorch 公式 Web サイトへのアクセスは次のとおりです:Pytorch 公式 Web サイトのインストール

私自身の Pytorch バージョンと Python バージョン番号は次のように参照されます。

ここに画像の説明を挿入します

2.2 コードパラメータの変更

学者がコードを使用する場合、画像のパスと画像を保存するパスを変更するだけで済みます。

ここに画像の説明を挿入します

2.3 ウェイトファイル

私が提供したソース コード パッケージ内のウェイト ファイル、isp ファイル内の特定の場所は次のとおりです。

ここに画像の説明を挿入します

2.4 シングルフレーム変換コード

以下は、tiff を png 形式に変換するための完全なコードです。このコードは、私が提供したソース コード パッケージ内の tif_To_png.py ファイルです。
ここに画像の説明を挿入します


import cv2
import numpy as np
import torch

def pack_gbrg_raw(raw):                                               # 定义一个名为pack_gbrg_raw的函数,它接受一个参数raw,这个参数是一个GBRG格式的Bayer原始图像
    #pack GBRG Bayer raw to 4 channels
    black_level = 240                                                 # 定义黑色和白色的级别。这两个值用于后续的图像归一化。
    white_level = 2**12-1
    im = raw.astype(np.float32)                                       # 将输入的原始图像转换为浮点数类型
    im = np.maximum(im - black_level, 0) / (white_level-black_level)  # 对图像进行归一化处理,使其值在0到1之间

    im = np.expand_dims(im, axis=2)                                   # 在第三个维度(即通道维度)上为图像增加一个维度。
    img_shape = im.shape
    H = img_shape[0]                                                  # 获取图像的形状,并将高度和宽度分别存储在H和W中。
    W = img_shape[1]

    out = np.concatenate((im[1:H:2, 0:W:2, :],          # r           # 将图像的四个通道(R,Gr,B,Gb)沿着第三个维度(即通道维度)进行拼接。
                          im[1:H:2, 1:W:2, :],          # gr
                          im[0:H:2, 1:W:2, :],          # b
                          im[0:H:2, 0:W:2, :]), axis=2) # gb
    return out

def tensor2numpy(raw):  # raw: 1 * 4 * H * W
    input_full = raw.permute((0, 2, 3, 1))   # 1 * H * W * 4
    input_full = input_full.data.cpu().numpy()
    output = np.clip(input_full,0,1)
    return output

def preprocess(raw):
    input_full = raw.transpose((0, 3, 1, 2))
    input_full = torch.from_numpy(input_full)
    input_full = input_full.cuda()
    return input_full


img = cv2.imread("tif_images/4.tiff",-1)                           # 读入tiff格式图片
img = np.expand_dims(pack_gbrg_raw(img), axis=0)

isp = torch.load('isp/ISP_CNN.pth')

test_gt = (img - 240) / (2 ** 12 - 1 - 240)

gt_raw_frame = test_gt * (2 ** 12 - 1 - 240) + 240
gt_srgb_frame = tensor2numpy(isp(preprocess(gt_raw_frame)))[0]

img_png = np.uint8(gt_srgb_frame * 255)

cv2.imwrite("result_images/4.png",img_png)                         # 保存转换后的png或jpg图片路径及图片名称
cv2.imshow("img",img_png)
cv2.waitKey()
cv2.destroyAllWindows()

上記のコードを正常に実行するには、スクリプト ファイル models.py も必要です。学者がダウンロードして使用できるように、このコードをソース コード パッケージに入れました。
ここに画像の説明を挿入します

2.4.1 ソースコードパッケージのダウンロード

ソース コード パッケージのダウンロード リンクは次のとおりです:ソース コード パッケージ、抽出コード: 5kh2

次のように、ソース コード パッケージの tif_images フォルダーに 5 つのテスト イメージを .tiff 形式で提供しました。
ここに画像の説明を挿入します

2.5 マルチフレーム一括変換コード

学者は次のコードを使用し、2 か所を変更するだけで済みます。以下を参照してください。
ここに画像の説明を挿入します
ここに画像の説明を挿入します


import cv2
import numpy as np
import torch
import os
import sys

def pack_gbrg_raw(raw):                                               # 定义一个名为pack_gbrg_raw的函数,它接受一个参数raw,这个参数是一个GBRG格式的Bayer原始图像
    #pack GBRG Bayer raw to 4 channels
    black_level = 240                                                 # 定义黑色和白色的级别。这两个值用于后续的图像归一化。
    white_level = 2**12-1
    im = raw.astype(np.float32)                                       # 将输入的原始图像转换为浮点数类型
    im = np.maximum(im - black_level, 0) / (white_level-black_level)  # 对图像进行归一化处理,使其值在0到1之间

    im = np.expand_dims(im, axis=2)                                   # 在第三个维度(即通道维度)上为图像增加一个维度。
    img_shape = im.shape
    H = img_shape[0]                                                  # 获取图像的形状,并将高度和宽度分别存储在H和W中。
    W = img_shape[1]

    out = np.concatenate((im[1:H:2, 0:W:2, :],          # r           # 将图像的四个通道(R,Gr,B,Gb)沿着第三个维度(即通道维度)进行拼接。
                          im[1:H:2, 1:W:2, :],          # gr
                          im[0:H:2, 1:W:2, :],          # b
                          im[0:H:2, 0:W:2, :]), axis=2) # gb
    return out

def tensor2numpy(raw):  # raw: 1 * 4 * H * W
    input_full = raw.permute((0, 2, 3, 1))   # 1 * H * W * 4
    input_full = input_full.data.cpu().numpy()
    output = np.clip(input_full,0,1)
    return output

def preprocess(raw):
    input_full = raw.transpose((0, 3, 1, 2))
    input_full = torch.from_numpy(input_full)
    input_full = input_full.cuda()
    return input_full

img_path = "CRVD_dataset/indoor_raw_noisy/indoor_raw_noisy_scene7/scene7/ISO1600"                        # tiff格式图片路径
save_path = "CRVD_dataset/indoor_raw_noisy/indoor_raw_noisy_scene7/scene7/ISO1600_png"                   # 转换后的保存路径

file = os.listdir(path=img_path)

for item in file:
    img = cv2.imread(os.path.join(img_path,item),-1)

    img = np.expand_dims(pack_gbrg_raw(img), axis=0)

    isp = torch.load('isp/ISP_CNN.pth')
    test_gt = (img - 240) / (2 ** 12 - 1 - 240)                   # 计算地面真实图像的标准化值
    gt_raw_frame = test_gt * (2 ** 12 - 1 - 240) + 240            # 计算输出的最终值
    gt_srgb_frame = tensor2numpy(isp(preprocess(gt_raw_frame)))[0]   # 将预处理后的图像转换为sRGB格式

    img_png = np.uint8(gt_srgb_frame * 255)


    out_file = item[:-5] + ".png"
    print('图片{}转换为png成功!'.format(item))

    cv2.imwrite(os.path.join(save_path,out_file), img_png)

    key = cv2.waitKey(30) & 0xff
    if key == 27:
        sys.exit(0)

3. コンバージョン効果

3.1 変換テストシナリオ 1

ここに画像の説明を挿入します

3.2 変換テストシナリオ 2

ここに画像の説明を挿入します

3.3 変換テストシナリオ 3

ここに画像の説明を挿入します

3.4 変換テストシナリオ 4

このシナリオでは、元の .tiff イメージがノイズ イメージになります。
ここに画像の説明を挿入します

3.5 変換テストシナリオ 5

ここに画像の説明を挿入します

3.6 一括変換の効果

ここに画像の説明を挿入します

上記の複数のシーンのテストを通じて、元の色に正常に変換でき、画像の詳細がすべて存在していることがわかります。

4. まとめ

上記は、.tiff 形式の画像をビジュアル png、jpg、bmp およびその他の形式に変換する完全なプロセスです。私が提供したサンプル コードでは、主に .ti​​ff 形式の画像を .png 形式に変換します。学者が他の形式に変換したい場合は、画像の場合、画像を保存するときにサフィックスを変更するだけで済みます。

上記でテストした 4 つのシナリオのうち、一部の写真のノイズは変換によるものではなく、元の .tiff 形式のノイズ画像であり、変換後に元の画像の細部が変更されることを心配する必要はありません。

まとめるのは簡単ではありませんが、よろしくお願いします!

おすすめ

転載: blog.csdn.net/qq_40280673/article/details/134778095