Двоичное изображение с использованием skimage - PullRequest
0 голосов
/ 14 июля 2020

Я создал функцию, которая преобразует изображение в изображение в оттенках серого, а также двоичное изображение для изображения. Однако возвращаемое значение (которое должно быть двоичным изображением) выходит пурпурным и желтым. Когда я делаю cmap = 'gray' в функции, это получается правильно, однако я не могу этого сделать при возврате. Как я могу исправить это?

Мой текущий код:

def greyscale_and_binary(file, file_name):
    '''
    this function graphs a histogram for the greyscale for the file inputed. It converts the image to grayscale image
    It also creates a binary image for the file

    Parameters
    ----------
    file : Array of float32
        the image.
    file_name : str
        name of the file to be ouputted on the graph.

    Returns
    -------
    binary_file : array of bool
        binary of the file/image.

    '''
    gray_file = rgb2grey(file) #convert to grayscale
    threshold = skimage.filters.threshold_otsu(gray_file) #input value
    binary_file = (gray_file < threshold) #binary is when less than trheshold
    
    #plot histogram on grayscale image
    histogram, bin_edges = np.histogram(gray_file, bins = 256, range=(0,1))
    plt.title('Histogram of gray scale values:'+ file_name)
    plt.axvline(threshold, color = 'r', label = 'threshold') #threshold marked with a red vertical line
    plt.legend()
    plt.plot(bin_edges[0:-1], histogram)

    #plot binary, original image and gray scale image next to each other 
    fig, axes = plt.subplots(ncols=3, figsize=(8,3))
    ax = axes.ravel()

    ax[0].imshow(file)
    ax[0].set_title('original')

    ax[1].imshow(gray_file, cmap = 'gray')
    ax[1].set_title('grayscale')

    ax[2].imshow(binary_file, cmap = 'gray')
    ax[2].set_title('binary')
    
    #remove axis
    for a in ax:
        a.axis('off')

    fig.tight_layout()
    plt.show()
    return binary_file


binarys = greyscale_and_binary(image, 'image')



binarys = morph.remove_small_objects(binarys)
img_blob = morph.remove_small_holes(binarys)

Кроме того, мои последние две функции не работают. Он не удаляет мелкие предметы или маленькие отверстия. Любая причина, почему или как это исправить?

Мой график для двоичных файлов (повернутый) по сравнению с моим желаемым результатом my desired output введите описание изображения здесь

1 Ответ

0 голосов
/ 14 июля 2020

Это действительно проблема с цветовой картой. Вы можете установить глобальную цветовую карту для всех графиков, используя команду matplotlib rcparams в самом начале вашего кода:

import matplotlib as mpl
mpl.rc('image', cmap='gray')

Это укажет matplotlib использовать этот параметр для всего времени выполнения. Вы можете изменить их во время выполнения, а также можете настроить множество других параметров, описанных в документации .

...