簡體   English   中英

在 Python 中將 dicom 圖像與 OpenCV 結合使用

[英]Using dicom Images with OpenCV in Python

我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止,我已經使用 pydicom 庫讀取 dicom(.dcm) 圖像數據並使用像素數組屬性使用 OpenCV imshow 方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)

cv2.waitkey()

如果我打印出這里使用的數組,輸出將與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示帶有一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?

我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)

cv2.waitkey()

如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?

我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)

cv2.waitkey()

如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?

我正在嘗試使用 dicom 圖像並在 Python 環境中使用 OpenCV 對其進行操作。 到目前為止我已經使用pydicom庫讀取dicom(.dcm)圖像數據並使用像素數組屬性使用OpenCV imshow方法顯示圖片。 但輸出只是一個空白窗口。 這是我目前正在使用的代碼片段。

import numpy as np
import cv2
import pydicom as dicom

ds=dicom.dcmread('sample.dcm')
cv2.imshow('sample image dicom',ds.pixel_array)

cv2.waitkey()

如果我打印出這里使用的數組,輸出與我使用普通 numpy 數組得到的不同。 我也嘗試過使用 matplotlib imshow 方法,它能夠顯示一些顏色失真的圖像。 有沒有辦法將數組轉換為 OpenCV 的清晰格式?

這是在 opencv 中將圖像作為 numpy 數組打開同時保持圖像質量的最佳方式(在我看來):

import numpy as np
import pydicom, os, cv2

def dicom_to_numpy(ds):
    DCM_Img = ds
    rows = DCM_Img.get(0x00280010).value #Get number of rows from tag (0028, 0010)
    cols = DCM_Img.get(0x00280011).value #Get number of cols from tag (0028, 0011)
    
    Instance_Number = int(DCM_Img.get(0x00200013).value) #Get actual slice instance number from tag (0020, 0013)

    Window_Center = int(DCM_Img.get(0x00281050).value) #Get window center from tag (0028, 1050)
    
    Window_Width = int(DCM_Img.get(0x00281051).value) #Get window width from tag (0028, 1051)

    Window_Max = int(Window_Center + Window_Width / 2)
    Window_Min = int(Window_Center - Window_Width / 2)


    if (DCM_Img.get(0x00281052) is None):
        Rescale_Intercept = 0
    else:
        Rescale_Intercept = int(DCM_Img.get(0x00281052).value)

    if (DCM_Img.get(0x00281053) is None):
        Rescale_Slope = 1
    else:
        Rescale_Slope = int(DCM_Img.get(0x00281053).value)

    New_Img = np.zeros((rows, cols), np.uint8)
    Pixels = DCM_Img.pixel_array

    for i in range(0, rows):
        for j in range(0, cols):
            Pix_Val = Pixels[i][j]
            Rescale_Pix_Val = Pix_Val * Rescale_Slope + Rescale_Intercept

            if (Rescale_Pix_Val > Window_Max): #if intensity is greater than max window
                New_Img[i][j] = 255
            elif (Rescale_Pix_Val < Window_Min): #if intensity is less than min window
                New_Img[i][j] = 0
            else:
                New_Img[i][j] = int(((Rescale_Pix_Val - Window_Min) / (Window_Max - Window_Min)) * 255) #Normalize the intensities
                
    return New_Img


file_path = "C:/example.dcm"
image = pydicom.read_file(file_path)
image = dicom_to_numpy(image)

#show image
cv2.imshow('sample image dicom',image)
cv2.waitKey(0)
cv2.destroyAllWindows()

暫無
暫無

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

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