Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.94.213] |
|
Сообщ.
#1
,
|
|
|
здравствуйте. Наткнулся на статью Цифровая обработка изображения, не могу разобраться с методом Нормализации гистограммы. Метод описан так:
Цитата Не понимаю, что они имеют ввиду под словом "растягивается" - линейное растяжение или какое? Кто знаком с этим, подскажите. Или поделитесь своими догадками) Еще более можно улучшить контраст, используя нормализацию гистограммы. При этом на весь максимальный интервал уровней яркости [0, 255] растягивается не вся гистограмма, лежащая в пределах от fмин до fмакс, а её наиболее интенсивный участок (fмин', fмакс'), из рассмотрения исключаются малоинформативные "хвосты". На рис. 2б исключено 5% пикселов. |
Сообщ.
#2
,
|
|
|
Линейное растяжение, IMHO.
|
Сообщ.
#3
,
|
|
|
у меня в курсе систем цифровых обработок изображений шло как выделение поддиапазона:
for i:=0 to Image1.Picture.Bitmap.Height-1 do begin Line:=Image1.Picture.Bitmap.ScanLine[i]; for j:=0 to Image1.Picture.Bitmap.Width*3-1 do begin temp:=round(255*(Line^[j]-c1)/(c2-c1)); goodc0(temp); //функция преобразования параметра в положительное от 0 до 255. Line^[j]:=temp; end; end; |
Сообщ.
#4
,
|
|
|
Lamer#1,напиши, пожалуйста, комментарии, а то я не совсем понимаю.
for j:=0 to Image1.Picture.Bitmap.Width*3-1 do begin //почему тут умножаем на 3? temp:=round(255*(Line^[j]-c1)/(c2-c1));//что такое с1,с2 и что имеется ввиду под Line^[j] goodc0(temp); //функция преобразования параметра в положительное от 0 до 255. Line^[j]:=temp; два циклы необходимы, чтобы пройтись по каждому пикселю изображения? спасибо! |
Сообщ.
#5
,
|
|
|
CoGNaC, думаю хелп в помощь по сканлайну и битмапу. у меня 24 битные бмп файлы были.
с1 с2 - это (fмин', fмакс') твои. |
Сообщ.
#6
,
|
|
|
CoGNaC
для каждого канала RGB считаешь вес значений, далее по коэффициенту (подбирается экспериментально или задается интерактивно) находишь первое значение в начале и конце гистограммы которое >= заданному коэффициенту и таким образом находится минимум и максимум который и нужно растянуть в диапазон 0..255. |
Сообщ.
#7
,
|
|
|
x128, спасибо за ответ. Что вы имеете ввиду под словом "канал RGB" - значение яркости пикселя? С минимума и максимума я понял. А вот с растяжением как раз у меня возникают трудности, растягивать с помощью линейной функции?)
|
Сообщ.
#8
,
|
|
|
Цитата CoGNaC @ Что вы имеете ввиду под словом "канал RGB" - значение яркости пикселя? значение яркости для отдельно взятого компонента R, G и B. Цитата CoGNaC @ А вот с растяжением как раз у меня возникают трудности, растягивать с помощью линейной функции? все зависит от задачи, в простом случае линейно: к=округлить((к-минимум)*255/(максимум-минимум)) где к=текущий пиксел компонента. |
Сообщ.
#9
,
|
|
|
Спасибо всем! И отдельный вопрос, как подсчитать сложность выполнения алгоритма?
|
Сообщ.
#10
,
|
|
|
В данном случае:
построение гистограммы O(N), где N - число пикселей; определение границ O(M), где M - число градаций, как правило M много меньше N; нормализация O(N). В результате получаем O(N) - сложность пропорциональна размеру картинки, быстрее просто нельзя Даже более сложная обработка, типа выравнивания гистограммы или подбор гаммы не увеличивает порядок сложности. |