В начале ваш image
является массивом размером width x height x No. color channels
. Изображения «Lenna» - это в основном квадратные, трехканальные («цветные») изображения, поэтому предположим, что ваш image
имеет размер 200 x 200 x 3
.
После этого вы выполняете ручное преобразование цвета в оттенки серого, используя специальную формулу luma . В итоге ваше y
будет изображением в градациях серого (или массивом) размером width x height
со значениями от 0
до 255
.
Теперь для конкретных «координат изображения», таких как i = 5
и j = 6
, вы можете получить доступ к значению пикселя / интенсивности в y
, например: y[i,j]
. Допустим, значение в этой позиции составляет 124
.
Ваш hist
вектор имеет 256
элементов, к которым можно получить доступ по индексам от 0
до 255
, что идеально соответствует нашим значениям пикселя / интенсивности выше. И все записи y
в начале 0
.
Теперь мы выполняем итерацию по всему изображению:
for i in range(0, image.shape[0]):
for j in range(0, image.shape[1]):
i
идет от 0
до 199
. И для каждого i
, j
также идет от 0
до 199
, покрывая все пиксели в нашем изображении.
Внутри цикла мы получаем значение пикселя / интенсивности в позиции (i,j)
, как показано выше: y[i,j]
. Допустим, это 124
. Затем мы получаем доступ к соответствующей записи в hist
, то есть hist[y[i,j]]
совпадает с hist[124]
.
Наконец, мы увеличиваем соответствующую запись в hist
на 1
, поэтому раньше hist[124]
было 0
, а теперь hist[124]
становится 1
.
В конце вы подсчитываете, как часто каждый пиксель / значение интенсивности появляется на вашем изображении y
. Итак, hist[124]
может быть 1452
, когда вся рутина завершена.
Надеюсь, это поможет!