несколько изображений в градациях серого - PullRequest
0 голосов
/ 23 декабря 2019

Я работаю над сегментацией изображения с использованием региона, основанного на этом. Мне нужно преобразовать мои файлы dicom в оттенки серого, я выполнил одно изображение, оно работает хорошо, но для нескольких изображений выдает ошибку.

def DicomtoRGB(dicomfile,bt,wt):
    """Create new image(numpy array) filled with certain color in RGB"""
    # Create black blank image
    image = np.zeros((dicomfile.shape[0], dicomfile.shape[1], 3), np.uint8)
    #loops on image height and width
    i=0
    j=0
    while i<dicomfile.shape[0]:
        j=0
        while j<dicomfile.shape[1]:
            color = yaxpb(dicom_file.pixel_array[i][j],bt,wt) #linear transformation to be adapted
            image[i][j] = (color,color,color)## same R,G, B value to obtain greyscale
            j=j+1
        i=i+1
    return image

def yaxpb(pxvalue,bt,wt):
    if pxvalue < bt:
        y=0
    elif pxvalue > wt:
        y=255
    else:
        y=pxvalue*255/(wt-bt)-255*bt/(wt-bt)
    return y

for filename in os.listdir(path):
    dicom_file = os.path.join(path,filename)   
    exists = os.path.isfile(dicom_file) 
    print(filename)
    ds = dicom.read_file(dicom_file)
    dcm_sample=ds.pixel_array*128
    print(type(dcm_sample))

    image=DicomtoRGB(dcm_sample,bt=0,wt=1400)
    print(type(image))
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = rgb2gray(image)
    plt.imshow(gray, cmap='gray') 

здесь моя ошибка

AttributeError                            Traceback (most recent call last)
<ipython-input-22-575cc8822b54> in <module>
      7     print(type(dcm_sample))
      8 
----> 9     image=DicomtoRGB(dcm_sample,bt=0,wt=1400)
     10     print(type(image))
     11     gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

<ipython-input-20-9c7a51460e87> in DicomtoRGB(dicomfile, bt, wt)
     14         while j<dicomfile.shape[1]:
     15             print(type(dicom_file))
---> 16             color = yaxpb(dicom_file.pxvalue[i][j],bt,wt) #linear transformation to be adapted
     17             image[i][j] = (color,color,color)## same R,G, B value to obtain greyscale
     18             j=j+1

AttributeError: 'str' object has no attribute 'pixel_array'

или кто-то, пожалуйста, напишите мне любую ссылку, где несколько изображений dicom преобразуются в оттенки серого.

Ответы [ 2 ]

1 голос
/ 23 декабря 2019

Последняя строка вашего вопроса подразумевает, что вы рады рассмотреть другие возможности, поэтому я бы предложил ImageMagick , который установлен в большинстве дистрибутивов Linux и доступен для macOS и Windows.

Таким образом, просто в терминале вы можете конвертировать все изображения Dicom в оттенки серого и автоматически устанавливать уровни яркости на весь диапазон, сохраняя в формате PNG, с помощью:

magick mogrify -format PNG -colorspace gray -auto-level *.dcm

или, если хотите, чтобы они были сохраненыв качестве JPEG в каталоге с именем grayscale используйте:

mkdir grayscale
magic mogrify -format JPEG -path grayscale -colorspace gray -auto-level *.dcm

Если вы используете более раннюю версию v6 ImageMagick , опустите слово magick в командах, которые я показывал выше.

0 голосов
/ 29 декабря 2019

Эта строка является проблемой:

color = yaxpb(dicom_file.pixel_array[i][j],bt,wt)

dicom_file - это путь к файлу из цикла for, а не к массиву. Я думаю, что вы хотите dicomfile вместо dicom_file.pixel_array

color = yaxpb(dicomfile[i][j],bt,wt)
...