簡體   English   中英

為什么 16 位到 8 位轉換會產生條紋圖像?

[英]Why 16bit to 8bit conversion produces striped image?

我正在幾個 VHSR 衛星圖像上測試分割算法,這些圖像最初是 16 位格式,但是當我將它們轉換為 8 位圖像時,生成的圖像顯示出條紋外觀。 我一直在嘗試不同的 python 庫(skimage、cv2、scipy)得到類似的結果。

1) 原始的 16 位圖像是 4 波段圖像(NIR、B、G、R),因此您需要選擇正確的波段來創建真彩色圖像,RGB 圖像(4、3、2 波段)。 提前致謝。 可以從這個鏈接下載:16bit image

2)我使用此代碼從現在適合 8 位范圍內的 16 位整數轉換每個像素值:

  from scipy.misc import bytescale
  SS = io.imread('Imag16bit.tif')
  SS = bytescale(SS)
  SS = np.asarray(SS) 
  plt.imshow(SS)

這是我上面代碼的結果:

bytescale對我bytescale 我認為asarray步驟asarray了一些事情。

import cv2
from skimage import io
from scipy.misc import bytescale

image = io.imread('SkySat_16bit.tif')
cv2.imshow('Original', image)
print(image.dtype)

image = bytescale(image)
print(image.dtype)

cv2.imshow('Converted', image)
cv2.waitKey(0)

在此處輸入圖片說明

我認為這是一種方法:

#!/usr/local/bin/python3

from PIL import Image
from tifffile import imsave, imread

# Load image
im = imread('SkySat_16bit.tif')

# Extract Red, Green and Blue bands into separate 8-bit arrays
R = (im[:,:,3]/256).astype(np.uint8)
G = (im[:,:,2]/256).astype(np.uint8)
B = (im[:,:,1]/256).astype(np.uint8)

# Combine bands into RGB array
RGB = np.dstack((R,G,B))

# Save to disk
Image.fromarray(RGB).save('result.png')

在此處輸入圖片說明

您可能需要稍微調整一下對比度,並檢查我選擇了正確的波段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM