[Python] Opencv、PIL、gdal読み取り高解像度リモートセンシング画像の比較

すべてのブログすべてのモットー:最短の答えはやっています。

0.まえがき

高解像度リモートセンシング画像を読み取るためのさまざまな方法の比較実験で使用された高解像度画像には、R、G、B、Nir(近赤外線)バンドの4つのバンドが含まれています

1.テキスト

比較の主な方法:ハイスコア画像(256、256、4)を読み取り、各チャネル(256、256)を個別に取得し、各チャネルに一意の値を取得し(np.unique())、最後に比較のための各チャネル10の一意の値。

1.1共有コード

パッケージのインポート

import cv2 as  cv
import numpy as np
import gdal
from PIL import Image

path = r'./data/input/000001.tif'

3次元配列(256、256、4)の各チャネルに値を出力します

def print_result(arr, name):
    """ 对三维数组(256,256,4)的每个通道进行打印前10个唯一值
    
    :param arr: 三维数组
    :param name: 使用的方法名
    :return: 
    """
    ch1 = arr[:, :, 0]
    ch2 = arr[:, :, 1]
    ch3 = arr[:, :, 2]
    ch4 = arr[:, :, 3]
    print(ch1.shape)
    print('{} unqiue 1:'.format(name), np.unique(ch1)[:10])
    print('{} unqiue 2:'.format(name), np.unique(ch2)[:10])
    print('{} unqiue 3:'.format(name), np.unique(ch3)[:10])
    print('{} unqiue 4:'.format(name), np.unique(ch4)[:10])

1.2 opencv

1.2.1コード

def cv_load():
    arr = cv.imread(path, cv.IMREAD_UNCHANGED)
    print_result(arr, 'cv')
    
cv_load()

1.2.2結果

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

1.3 PIL

1.3.1コード

def Image_load():
    img = Image.open(path)
    arr = np.array(img)
    print_result(arr, 'Image')
   
Image_load()

1.3.2結果

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

1.4gdalメソッド1

1.4.1コード

def gdal_load_img():
    dataset = gdal.Open(path)
    arr = dataset.ReadAsArray()
    arr = arr.reshape((256, 256, 4))
    print_result(arr, 'gdal')

gdal_load_img()

1.4.2結果

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

1.5gdalメソッド2

1.5.1コード

def gdal_load2():
    dataset = gdal.Open(path)
    bands = dataset.RasterCount

    for band in range(1, bands + 1):
        # print(band)
        # 读取波段
        src_band = dataset.GetRasterBand(band)
        # 波段转数组
        band_arr = src_band.ReadAsArray()

        if band == 1:
            height = band_arr.shape[0]
            width = band_arr.shape[1]
            arr = np.zeros((height, width, bands), dtype=np.uint8)

        arr[:, :, band - 1] = band_arr

    # ------------------
    # 查看结果
    print_result(arr, 'gdal2')

gdal_load2()

1.5.2結果

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

1.6まとめ

全体的な結果:
ここに画像の説明を挿入します

  1. PILとgdalの2番目の方法は同じ結果になります
  2. opencvの最後のチャネルは、上記の2つの結果の最後のチャネルと同じです。
  3. 同じ写真を読んだ後、結果が異なるのはなぜですか?解決すべきこの点

おすすめ

転載: blog.csdn.net/weixin_39190382/article/details/113745925