Как сохранить несколько участков на полной битовой глубине - PullRequest
1 голос
/ 27 февраля 2020

Я использую Python 2.7, OpenCV, matplotlib, чтобы создать «контактный лист» преобразований изображений. Мой входной файл - ~ 1920x1200 PNG в оттенках серого. Я хотел бы сохранить полный контактный лист (представленный в коде объектом 'fig', если я правильно понимаю).

Когда я запускаю следующее, я получаю выходной PNG размером ~ 200 КБ, который кажется пустым для зрителей изображений. Я не уверен, правильно ли я использую savefig () (или на правильном объекте), или проблема в том, что savefig смущен 16-битными данными

Извините за хакерский код!

редактировать: образец здесь http://www.filedropper.com/sample_83

fig,axs = plt.subplots(5,3)
for clip in enumerate(range(1,6)):
    for exp in enumerate(range(2,5)):
        gridsize = (pow(2,exp[1]),pow(2,exp[1]))
        cliplim = clip[1]*3 

        clahe = cv.createCLAHE(clipLimit=cliplim,tileGridSize=gridsize)
        cl = cv.normalize(clahe.apply(img16),None,0,65535,cv.NORM_MINMAX)

        axs[clip[0],exp[0]].imshow(cv.bitwise_not(cl),cmap='Greys')

        axs[clip[0],exp[0]].set_title('clip=%s grid=%s'%(cliplim,gridsize[0]))
        axs[clip[0],exp[0]].get_xaxis().set_visible(False)
        axs[clip[0],exp[0]].get_yaxis().set_visible(False)
fig.savefig('out.png')
plt.show()

1 Ответ

2 голосов
/ 28 февраля 2020

Ваше изображение действительно 16-битное, но оно имеет низкую контрастность, поэтому оно выглядит "плоский серый" . Вы можете запустить его через ImageMagick identify, как это. Я добавил стрелки справа, указывающие на значимые части.

magick identify -verbose sample.png               # omit "magick" if still using v6

Пример вывода

Image: sample.png
  Format: PNG (Portable Network Graphics)
  Mime type: image/png
  Class: DirectClass
  Geometry: 1920x1080+0+0
  Units: Undefined
  Colorspace: Gray
  Type: Grayscale
  Base type: Undefined
  Endianess: Undefined
  Depth: 16-bit                               <--- 16-bit
  Channel depth:
    Gray: 16-bit
  Channel statistics:
    Pixels: 2073600
    Gray:
      min: 27916  (0.425971)                  <--- min 27,916 of 65,535
      max: 44722 (0.682414)                   <--- max 44,722 of 65,535
      mean: 30629.2 (0.467372)
      standard deviation: 297.459 (0.00453893)
      kurtosis: 219.144
      skewness: 6.43389
      entropy: 0.811496
  Rendering intent: Undefined
  Gamma: 0.454545
  Matte color: grey74
  Background color: white
  Border color: srgb(223,223,223)
  Transparent color: none
  Interlace: None
  Intensity: Undefined
  Compose: Over
  Page geometry: 1920x1080+0+0
  Dispose: Undefined
  Iterations: 0
  Compression: Zip
  Orientation: Undefined
  Properties:
    date:create: 2020-02-28T08:17:02+00:00
    date:modify: 2020-02-28T08:17:01+00:00
    png:IHDR.bit-depth-orig: 16
    png:IHDR.bit_depth: 16
    png:IHDR.color-type-orig: 0
    png:IHDR.color_type: 0 (Grayscale)
    png:IHDR.interlace_method: 0 (Not interlaced)
    png:IHDR.width,height: 1920, 1080
    signature: bfd36a4055d8bb31695bbed19738063efd9e842d4beec01c5d5123d32f1df42f
  Artifacts:
    verbose: true
  Tainted: False
  Filesize: 3.96262MiB
  Number pixels: 2073600
  Pixels per second: 75.0272MP
  User time: 0.020u
  Elapsed time: 0:01.027
  Version: ImageMagick 7.0.9-6 Q16 x86_64 2019-11-27 https://imagemagick.org

Как видите, яркость колеблется от 27 916 до 44 722 из возможного диапазона 65 535, поэтому вы используете только 26% доступного диапазона в 16-битном изображении.

Итак, если вы хотите, чтобы ваше изображение отображалось лучше, вы можете нормализовать его до сначала полный диапазон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...