0
votes

Comment est-il possible qu'il n'y ait visuellement aucune différence entre les images 8 bits et 16 bits?

J'essaie de tester la quantité d'informations que je perdrai si je convertis (initialement) des images 16 bits que j'ai lues à partir de fichiers .dcm à l'aide du module pydicom, en images 8 bits. Voici le code de visualisation que j'utilise:

from mpl_toolkits.axes_grid1 import ImageGrid
import matplotlib.pyplot as plt
%matplotlib inline

def show_images(images, row_num=1, col_num=None):
  if not col_num:
    col_num = len(images)

  fig = plt.figure(figsize=(12., 12.))  
  grid = ImageGrid(fig, 111, nrows_ncols=(row_num, col_num),axes_pad=0.1)
  
  for ax, im in zip(grid, images):
    ax.axis('off')
    ax.imshow(im, cmap="gray")

show_images([raw_image_8, agcwd_image_8, raw_image_16, agcwd_image_16], row_num=2, col_num=2)

Et voici ce que j'obtiens en sortie:

entrez la description de l'image ici

Comme vous pouvez le voir, visuellement aucune différence. Maintenant, est-ce dû à la classe ImageGrid, ou à une autre fonctionnalité intégrée dont je ne suis pas conscient, ou n'y a-t-il vraiment aucune différence?

Remarque sur la façon dont j'ai obtenu des images:

  1. Lisez-les à partir de fichiers .dcm en utilisant pydicom comme images 16 bits
  2. Les a réécrits sur le disque en tant que .png
  3. En utilisant cv2.imread ("image_path"), j'ai obtenu des images 8 bits (paramètre OpenCV par défaut), et en utilisant cv2.imread ("image_path", -1) j'ai obtenu des images 16 bits (l'argument -1 indique à OpenCV pour lire l'image telle quelle).


0 commentaires

3 Réponses :


2
votes

Le site Web https://gregbenzphotography.com/photography-tips/8-vs-16-bit-depth-photoshop donne une bonne description visuelle de l'échelle de gris de 1 bit à 14 bits. La vérité est qu'au-delà de 8 bits, la différence est vraiment assez subtile.

Vous devez également vérifier la qualité de votre moniteur. Votre moniteur peut ne pas prendre en charge plus de 8 bits par canal de couleur.


0 commentaires

0
votes

Considérez que l'œil humain peut distinguer environ 50 nuances de gris discrètes dans la plage d'intensité d'un moniteur vidéo, c'est-à-dire que vous ne pouvez pas apprécier les profondeurs au-delà de 6-7 bits sur votre écran.


0 commentaires

2
votes

Vous perdez des informations lors de la conversion de 16 bits en 8 bits, c'est juste que les informations perdues n'apparaissent pas dans votre exemple.

Si vous recadrez uniquement la partie gauche de l'image où le gris est beaucoup plus faible, convertissez-la plutôt que de ne pas la convertir en 8 bits, puis réajustez le contraste, vous verrez que l'image 8 bits traitée aurait un dégradé moins lisse. de gris par rapport à l'image 16 bits. Dans mon travail avec les images de microscopie à fluorescence, je vais donc toujours ajuster le contraste de l'image 16 bits avant de la convertir en 8 bits, afin que la conversion ne produise pas de différence visuelle perceptible de qualité


2 commentaires

Souhaitez-vous s'il vous plaît partager la technique que vous utilisez pour régler le contraste? Y a-t-il un papier ou?


Je le fais avec ImageJ ( fiji.sc ), donc je ne suis pas sûr que cela se connecte à votre flux de travail. Il existe un outil Luminosité et contraste dans ImageJ avec lequel vous pouvez régler le contraste en sélectionnant la plage d'intensités de pixels (par exemple 200 - 10000) que vous souhaitez considérer comme votre nouvelle plage complète. Cela signifie que vous considérez les intensités de 0 à 199 toutes comme "min" et 10001-65535 toutes comme "max". Après cette étape d'ajustement, vous passez à 8 bits, de sorte que votre plage d'intérêt (200-10000) soit bien répartie sur 0-255. Si vous aviez d'abord converti en 8 bits, votre plage d'intensité ne couvre que ~ 0-40