imho.ws |
![]() |
![]() |
![]() |
# 21 |
::VIP::
Регистрация: 12.04.2004
Адрес: подводная лодка ОфПомОчБар
Сообщения: 607
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
надо написать в матлабе следущее:
(есть такая готовая функция но мне надо написать свою, что то в готовой не могу разобраться, сильно накрученная она) HistEqual(X, Y) Histogram equalization. After running this function, the histogram of X should be as similar to the histogram of Y as possible, without changing the histogram of Y. Return the new image after histogram equalization. алгоритм следующий: Equalize :For every original gray level k 1. Calculate the image histogram 2. Find the accumulative sum of the histogram values - yk (in Matlab – cumsum(vec)) 3. Normalize the values of the histogram accumulative sum by dividing in the total number of pixels 4. Multiple the normalized vector in the maximal gray level value (K-1) and round (shift back to the original gray level range) 5. Map the gray levels values to the result of step (3) 6. Stretch the values back to the range 1,..K (improve contrast in the end of this process) вроде все ясно но вот как сделать в матлабе пятый пункт не понимаю ![]() помогите плиз заранее спасибо |
![]() |
![]() |
# 22 | |
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
![]() Код:
origImage = imread(<your_file1>); % Х refImage = imread(<your_file2>); % У refHist = hist(refImage, 256 ); % <- предполагается 256 уровней серого newImage = histeq(origImage, refHist); |
|
![]() |
![]() |
# 23 | |||
::VIP::
Регистрация: 12.04.2004
Адрес: подводная лодка ОфПомОчБар
Сообщения: 607
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
только histeq должна быть написана мной Цитата:
ведь гистограмма говорит о том сколько пикселов имеют такой-то уровень серого, я же не знаю какие именно пикселы гистограмма оригинальной картинки такая: http://img78.***************img78/9462/origimagemr7.gif зеркало http://s.foto.radikal.ru/0704/13/08cc834d5100.gif а гистограмма референсной картинки такая: http://img260.***************img260/6813/refimagerk8.gif зеркало http://s.foto.radikal.ru/0704/3e/f89dabc3ab0d.gif не понимаю как сделать замену пикселов в картинке ![]() Последний раз редактировалось Комбинатор; 29.04.2007 в 21:38. |
|||
![]() |
![]() |
# 24 |
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В результате шагов 1-4 ты получаешь монотонно растущую (!)функцию "интеграла" нормализованной гистограммы референса. И такую же монотонно растущую функцию "интеграла" гистограммы оригинала. То есть по оси Х цвет, а по оси У - сколько процентов пикселов с цветом меньшим или равным данному. Теперь тебе надо подогнать оригинал под референс. В твоем случае первый значения в оригинале появляются в районе "цвета" 240 - 9000 пикселов с таким цветом. на гистограмме референса ты смотришь на каком цвете у тебя накопилось 9000 пикселов (допустим 40) - значит всем пикселам с цветом 240 с оригинала присваиваешь цвет 40. Затем берешь цвет 241 - снова 9000 пикселов. Значит на графике "интеграла" будет 18000. Смотришь на референсе какой цвет сответсвует 18000 - скажем 80. Всем пикселям с цветом 241 присваиваешь 80. И так далее.
Это для конкретного случая что ты привел, когда размеры картинок одинаковы. Шаг 3 (нормализация) позволяет сравнивать картинки разных размеров - убирает зависимость от реального размера картинки, и оставляет лишь процентную зависимость. Удачи. Последний раз редактировалось crawler; 28.04.2007 в 11:11. |
![]() |
![]() |
# 25 | |
::VIP::
Регистрация: 12.04.2004
Адрес: подводная лодка ОфПомОчБар
Сообщения: 607
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
что делать в этом случае? даже если нормализирую две аккумулятивные гистограммы(пункт 3 в алгоритме) тоесть в одной и второй значения от нуля до 1 то все равно там значения точно не совпадают или я не правильно понял как делать надо ? ![]() |
|
![]() |
![]() |
# 26 |
Full Member
Регистрация: 11.12.2002
Сообщения: 864
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ты смотришь на саму гистограмму что ли
![]() У тебя гистограмма референса ровная. 9000/220 - выходит 40 ![]() Возьми нормализованные графики интегралов гистограм. Это будут монотонно растущие функции в пределах [0..255, 0..1]. Цвет 240 имеет значение 0.15 ( то есть 9000 это 15% от общего количества точек- следовательно размер картинки 60К пикселов). Идешь на гистограмму референса смотришь где есть 0.15 - и конвертишь 240 в тот цвет. Смотришь цвет 241 - у него значениие будет уже 0.3 (хотя точек с цветом 241 столько (9000) же как и 240). Смотришь на интеграле гистограмы референса 0.3 - ставишь этот цвет. Тогда получиться что в процентном отношении цвета референса и оригинала совпадут (не учитывая ошибок квантизаации) - то что ты и искал. Последний раз редактировалось crawler; 30.04.2007 в 10:22. |
![]() |
![]() |
# 27 |
Full Member
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Я матлаб незнаю, но
while i<=length(str) ... i=i+1; это перебор чисел от i до количества символов в стринге. if (str(i)~=' ') проверка символа на текущей позиции. в зависимости от результата проверки делаются присвоения переменным. |
![]() |