вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Эквализация

На первом этапе измеряется гистограмма исходного изображения. Для цифрового изображения, шкала яркостей которого, например, принадлежит целочисленному диапазону 0...255, гистограмма представляет собой таблицу из 256 чисел. Каждое из них показывает количество точек в кадре, имеющих данную яркость. Разделив все числа этой таблицы на общий размер выборки, равный числу используемых точек изображения, получают оценку распределения вероятностей яркости изображения.

На втором этапе выполняется само нелинейное преобразование, обеспечивающее необходимые свойства выходного изображения. При этом вместо неизвестного истинного интегрального распределения используется его оценка, основанная на гистограмме. С учетом этого все методы поэлементного преобразования изображений, целью которых является видоизменение законов распределения, получили название гистограммных методов. В частности, преобразование, при котором выходное изображение имеет равномерное распределение, называется эквализацией (выравниванием) гистограмм.

Характерной чертой многих изображений, получаемых в реальных изображающих системах, является значительный удельный вес темных участков и сравнительно малое число участков с высокой яркостью. Эквализация призвана откорректировать картину, выровняв интегральные площади участков с различными яркостями.

void CTestDoc::Equalize(IplImage* img)
{
// Создание lookup-таблиц
    IplLUT lut[3] ={{256 + 1, NULL, NULL, NULL, IPL_LUT_LOOKUP},
        {256 + 1, NULL, NULL, NULL, IPL_LUT_LOOKUP},
        {256 + 1, NULL, NULL, NULL, IPL_LUT_LOOKUP}};

// Создание и инициализация массива указателей на lookup-таблицы
    IplLUT* plut[3];
    plut[0] = &lut[0];
    plut[1] = &lut[1];
    plut[2] = &lut[2];

// Инициализация членов lookup-таблиц
    CreateLUT(plut[0]);
    CreateLUT(plut[1]);
    CreateLUT(plut[2]);

// Построение гистограммы для нахождения максимумов
    iplComputeHisto(img, plut);

// Эквализация
    iplHistoEqualize(img, img, plut);

// Удаление членов lookup-таблиц
    DeleteLUT(plut[0]);
    DeleteLUT(plut[1]);
    DeleteLUT(plut[2]);
}