Ричардсон-Люси не повышает резкость изображения

#image-processing

#обработка изображений

Вопрос:

Ранее я опубликовал вопрос об алгоритме Ричардсона-Люси. У меня есть дополнительный вопрос, с которым я был бы признателен за помощь. Ниже приведен код Python, который я использую. Мое входное изображение уже размыто, поэтому я удалил строки программы, которые изначально должны были намеренно размыть изображение. Я получаю сообщение об ошибке «Предупреждение о времени выполнения: недопустимое значение, встречающееся в true_divide relative_blur = image / convolve(im_deconv, psf, mode= ‘same’)» Я был бы признателен за помощь в отладке этого. Я сохранил строки в программе, которые я прокомментировал, основываясь на приведенном ниже предложении.

     import numpy as np
    
    import matplotlib.pyplot as plt
    
    from PIL import Image, ImageFilter
    
    from scipy.signal import convolve2d as conv2
    
    from skimage import color, data, restoration
    
    Image.open('TOFA-003_UV_Cured_Lincoln_Corrected.bmp').convert('L').save('TOFA-003_UV_Cured_Lincoln_Corrected_gray.bmp')
    
    astro = Image.open('TOFA-003_UV_Cured_Lincoln_Corrected_gray.bmp')
    
    
    psf = np.ones((5, 5)) / 25
    #psf = np.ones((8, 8)) / 25
    
    astro = conv2(astro, psf, 'same')
    astro = astro/255
    # Add Noise to Image
    #astro_noisy = astro.copy()
    #astro_noisy  = (np.random.poisson(lam=25, size=astro.shape) - 10) / 255
    
    #astro_noisy = astro_noisy/255
    
    # Restore Image using Richardson-Lucy algorithm
    deconvolved_RL = restoration.richardson_lucy(astro, psf, iterations=2)
    
    fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(8, 5))
    plt.gray()
    
    for a in (ax[0], ax[1], ax[2]):
           a.axis('off')
    
    ax[0].imshow(astro)
    ax[0].set_title('Original Data')
    
    #ax[1].imshow(astro_noisy)
    #ax[1].set_title('Noisy data')
    
    ax[2].imshow(deconvolved_RL, vmin=astro.min(), vmax=astro.max())
    ax[2].set_title('Restoration usingnRichardson-Lucy')
    
    
    fig.subplots_adjust(wspace=0.02, hspace=0.2,
                        top=0.9, bottom=0.05, left=0, right=1)
    plt.show()
  

Комментарии:

1. Как astro выглядит изображение до размытия? Изображение на самом деле четкое или оно уже было размытым? Обратите внимание, что вы это делаете astro = conv2(astro, psf, 'same') , поэтому вы перезаписываете исходное изображение, поэтому мы его не видим.

2. Здравствуйте. Я отредактировал свой оригинальный пост, добавив ссылку на «Начальное изображение». Это исходное изображение.

3. Это изображение уже размыто. Вы размываете его с помощью квадратного ядра размером 5×5, что будет иметь очень слабый эффект, затем вы отменяете это размытие. Все три изображения будут выглядеть очень похожими, потому что размытие на исходном изображении сильнее, чем у вашего ядра 5×5 box.

4. Здравствуйте. Я отредактировал свой последний пост, чтобы прокомментировать начальный шаг размытия.