Спектральные и пространственные измерения резкости. Как рассчитать наклон спектра? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь реализовать меру S1 (Спектральная мера резкости - Раздел III-A) из этой статьи .Здесь мы должны вычислить наклон (альфа) спектра величины для изображения, чтобы измерить резкость.Я могу написать другую часть алгоритма, но не могу рассчитать наклон.Вот мой кодФункция 'alpha' - это то, где я вычисляю magnitude_spectrum, и я думаю, что с помощью этого мы можем вычислить наклон, но я не уверен, как это сделать -

def aplha(image_block):
    img_float32 = np.float32(image_block)

    dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
    dft_shift = np.fft.fftshift(dft)
    magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))

    return output (??)

Остальная часть кода:

def S1_calc(alpha):
    tou1 = -3
    tou2 = 2
    output = 1 - (1 / (1 + np.exp(tou1 * (alpha - tou2))))
    return output

def lx(image_block):
    b = 0.7656
    k = 0.0364
    y = 2.2
    return np.power((b + k * image_block), y)

def contrast(lx_val):
    T1 = 5
    T2 = 2
    max_val = np.max(lx_val)
    min_val = np.min(lx_val)
    mean_val = np.mean(lx_val)
    return (((max_val - min_val) < T1) or (mean_val < T2))

def image_gray(image_RGB):
    output = (0.2989 * image_RGB[:,:,0] +
              0.5870 * image_RGB[:,:,1] +
              0.1140 * image_RGB[:,:,2])

    return output

def S1(gray_image, m = 32, d = 24):
    ### SPECTRAL MEASURE OF SHARPNESS ###

    # m = each block size
    # d = overlapping pixels of neighbouring blocks
    h,w = gray_image.shape
    output = gray_image.copy()

    row = 0
    while (row < h):
        col = 0
        while (col < w):

            top = row
            bottom = min(row + m, h)
            left = col
            right = min(col + m, w)

            image_block = gray_image[top : bottom, left : right]

            lx_val = lx(image_block)
            contrast_bool = contrast(lx_val)
            if contrast_bool==True:
                output[top : bottom, left : right] = 0
            else:
                alpha_val = aplha(image_block)
                output[top : bottom, left : right] = S1_calc(alpha_val)

            col = col + m - d
        row = row + m - d

    return output

Использую ноутбук Jupyter, Python 3,6

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...