Почему преобразование 16 бит в 8 бит дает полосатое изображение? - PullRequest
0 голосов
/ 22 сентября 2018

Я тестирую алгоритм сегментации на нескольких спутниковых изображениях VHSR, который изначально поставляется в 16-битном формате, но когда я конвертирую их в 8-битные изображения, полученные изображения демонстрируют полосатый вид.Я пробовал разные библиотеки Python (skimage, cv2, scipy), получая схожие результаты.

1) Исходное 16-битное изображение, это 4-полосное изображение (NIR, B, G, R), поэтомуВам нужно выбрать правильные полосы, чтобы создать изображение истинного цвета, RGB-изображение (4,3,2 полосы).заранее спасибо.Его можно скачать по этой ссылке: 16-битное изображение

2) Я использую этот код для преобразования значения каждого пикселя из 16-битного целого числа, теперь подходящего в пределах 8-битного диапазона:

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

Это мой результат приведенного выше кода:

image

Любое предложение будет оценено, Jaime

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я думаю, что это способ сделать это:

#!/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')

enter image description here

Вы можете немного отрегулировать контраст и проверить Iвыбрал правильные полосы.

0 голосов
/ 24 сентября 2018

bytescale у меня работает.Я думаю, что шаг 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)

enter image description here

...