Гистограмма и Ошибки Оцифровки

Гистограмма

Гистограмма Изображения - это линейный массив длиной 256, где каждое поле H[g] содержит количество Пикселей, содержащих значение Серого g.
H[0] содержит число нулей в Изображении, H[1] содержит количество единиц и т.д.
Серые или Палетные Изображения содержат одну Гистограмму, TrueColor-Изображения содержат три Гистограммы.
Гистограммы информируют о базовых свойствах Изображения: Светлота, Контраст, Насыщенность и т.д.

Пример: Код для расчета Гистограммы int H[256] одного Изображения Byte I[ySize][xSize],
        H должна быть проинициализирована нулями.

Медленный Код:
for ( y=0; y < ySize; y++ )
  for ( x=0; x < xSize; x++ )
    H[I[y][x]]++;

Быстрый Код:
int* pointer = I;
for ( i=0; i < xSize*ySize; i++ ) H[*(pointer+i)]++;

Еще Быстрый Код:
for ( int* pointer = I; pointer < I + xSize*ySize; ) H[*pointer++]++;

Пример: дано I[4][5], требуется найти H[10]

         01020 
I[4][5]= 27891 Решение: H = [ 5, 4, 3, 2, 0, 1, 1, 2, 1, 1 ]
06571 Проверка: Количество значений в массиве Гистограмм должно быть
13230 ySize*xSize = 4*5 = 20.

Гистограммы визуализируются, как правило, в форме линейной диаграммы, где по горизонтали откладываются значения цвета от 0 до 255, а по вертикали частота появления соответствующего цвета на Изображении. Профессиональные камеры показывают три (RGB) гистограммы в реальном времени на мониторе, что позволяет оператору контролировать освещения, диафрагмы и т.д.
Примеры часто встречающихся Гистограмм:

Бинаризация - это важный шаг для подготовки к Распознаванию образов. Для этого используется Пороговое Значение = Threshold, которое отделяет передний план от заднего. Для определения Порогового Значения идеально подходит бимодальная (двухпиковая) Гистограмма, где ПЗ располагается между двумя вершинами.
Алгоритм бинаризации Изображений:

Медленный Код
:
for ( y=0; y < ySize; y++ )
  for ( x=0; x < xSize; x++ )
     if ( I[y][x] < threshold ) I[y][x] = 0; else I[y][x] = 255;


Быстрый Код
:
int* pointer = I;
for ( i=0; i < xSize*ySize; i++, pointer++ )
   if ( *pointer < threshold ) *pointer = 0; else *pointer = 255;

Шум = Noise


Лена с 50% Шума

Шум ( engl.: noise ) является наложением на идеальное Изображение I матрицы случайных значений N.
Пример:

    0000     1021              1021 
I = 0550 N = 2101 Bild = I+N = 2651
0000 0102 0102

Почти каждое реальное Изображение содержит > 10% Шума. Чаще всего шум возникает из-за броуновского движения электронов в Фото-сенсорах. Для борьбы с таким шумом используют системы охлаждения массива сенсоров жидким азотом или Элемент Пельтье (основан на эффекте, открытом Жаном Пельтье 1834) = две пластинки соединены комбинаций разнотипных полупроводников - при прохождении постоянного тока, одна сторона нагревается, а другая охлаждается. Молекулярное движений уменьшается при падении температуры Сенсоров и полностью исчезает при температуре -273 градуса Цельсия. Охлаждение Чипа - важное свойство профессиональных видео-камер. Минус - высокое энергопотребление - малое время работы аккумулятора.
Другой метод понижения уровня Шума - Низкочастотный Фильтр.

Неравномерное Освещение = Shading = Затенение


Лена с Затенением

Затенение - это дополнительное наложение на идеальное Изображение I функции рампы S. Само определение затенения не имеет ничего общего с тенями - это вводит в заблуждение, но все же оно используется повсеместно, кроме Японии и Китая, где это явление называют "Косой Свет".
Пример Затенения:

  22222   -2-1+0+1+2          01234 
I=66666 S=-2-1+0+1+2 Bild=I+S=45678
22222 -2-1+0+1+2 01234

Почти в каждом реальном изображении содержится >1% Затенения. Очень трудно осветить поверхность или объект однородно.
Коррекция Затенения: создание пустого Изображения S, не содержащего Объект Отображения и вычитание:
I = Bild - S.
Методы создания пустого Изображения S:
1) реальный - всегда снимать 2 Фото с Объектом и без Объекта Отображения;
2) искусственный - фотографировать Image через молочное стекло так, чтобы можно было видеть неравномерность освещения, но не само содержание снимка;
3) цифровой: наложить на Image сильный Низкочастотный Фильтр, чтобы возможно было распознать неравномерность освещения, но не содержание Изображения.
4) цифровой: Посчитать вертикальную Линию Регрессии цвета всех колонок и горизонтальную Линию Регрессии цвета всех Строк - получится отличное пустое Изображение без содержимого.
В реальном мире проблема Затенения встречается повсеместно. Все биологические системы обработки Изображений не испытывают с этим никаких трудностей и не воспринимает Затенение, как дефект. Однако для машинной системы обработки Затенение - это тяжелая проблема, т.к. препятствует качественной Бинаризации по Предельному Значению.

Низкая Контрастность



Трижды Лена с плохим Контрастом:
вверху = не темно, не светло, слабо
середина = недодержано
внизу = передержано

Определение Контрастности:
Сontrast = (max.GrayVal - min.GrayVal) / 255 *100%;

Если max.GrayVal< 255 или min.GrayVal > 0, то Контрастность падает ниже 100%. Это происходит, если при съемке использовалась неверная Экспозиция, или фотография со временем выгорает/затемняется.
Физическая борьба с плохим Контрастом - правильный подбор Экспозиции.
Цифровой метод борьбы - Растяжение Гистограммы.

Важно: Хороший Контраст не гарантирует хорошее Изображение.
Пример 1: Сильный Шум обычно дает хороший Контраст.
Пример 2: Сильное Затенение - хороший Контраст.
Пример 3: в одном полностью белом или полностью черном Изображении один Пиксел со значением 0 или 255 подымает контрастность до 100%.

Размытость = Blurring

Размытость - сглаживание идеального Изображения I так, что значение Цвета каждого Пиксела приближается к значениям Цветов соседних Пикселей.
Причина: Неверный Фокус, перемещение объекта, перемещение камеры (смазывание), рассеянный свет.
Причина рассеянного света - туман, загрязнение оптики, посторонний предмет перед объективом.

    0000000               0013100
    0099900               0136310
I = 0099900 -> Blurring = 0369630
    0099900               0136310
    0000000               0013100