Итерации в закрытии морфологии

У меня есть код, который выглядит так:

def blockKernel(sizeX, sizeY = None):
    if sizeY == None:
        sizeY = sizeX
    return np.ones((sizeX, sizeY), np.uint8)

img = readImage() // skipping readImage function, since irrelevant
closeBlock1 = cv.morphologyEx(img, cv.MORPH_CLOSE, blockKernel(3), iterations=1) 
closeBlock2 = cv.morphologyEx(img, cv.MORPH_CLOSE, blockKernel(3), iterations=3)

Я получаю следующие результаты:

закрытьБлок1:

closeBlock1

закрытьБлок2:

closeBlock2

Но потом я увидел это. В нем говорится:

Согласно «Цифровой обработке изображений, 3-е издание» Гонсалеса, многократное применение открытия / закрытия не имеет никакого эффекта после первого применения!

Но это не тот результат, который я получаю. Я получаю 1 против 3 итераций и получаю разные результаты. Я что-то делаю не так или что-то не понимаю?


person Ankit Kumar    schedule 20.04.2020    source источник


Ответы (1)


cv.morphologyEx(img, cv.MORPH_CLOSE, blockKernel(3), iterations=3) применяет закрытие с итерацией ядра, оно не закрывает итерацию.

Морфологическое закрытие представляет собой расширение с последующей эрозией. Эта функция применяет расширение, повторяя расширение 3x3 три раза, а затем эрозию, снова повторяя эрозию 3x3 три раза.

person Cris Luengo    schedule 20.04.2020
comment
Так что, если я вас правильно понял, пусть d = дилатация, а e = эрозия. Итак, закрытие = e(d(img)), но iterations=3 делает e(e(e(d(d(d(img))))))? - person Ankit Kumar; 20.04.2020
comment
Отлично, понял. Спасибо :) - person Ankit Kumar; 20.04.2020