imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 24.04.2007, 13:16     # 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)


вроде все ясно
но вот как сделать в матлабе пятый пункт не понимаю

помогите плиз
заранее спасибо
Комбинатор вне форума  
Старый 26.04.2007, 11:02     # 22
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Цитата:
что то в готовой не могу разобраться, сильно накрученная она
конечно, гораздо проще понять как она работает и написать ее самому
Код:
origImage = imread(<your_file1>); % Х
refImage = imread(<your_file2>); % У
refHist = hist(refImage, 256 ); % <- предполагается 256 уровней серого
newImage = histeq(origImage, refHist);
твой алгоритм - находит оптимальную фунцию для преобразования одной гистограммы в другую. Там получается график - на одной оси референсная гистограмма, на другой оригинальная. Таким образом для каждого оригинального цвета есть соответсвующий референсному. Ты просто подменяешь значения цветов - и в результате получаешь близкое сходство.
crawler вне форума  
Старый 27.04.2007, 22:27     # 23
Комбинатор
::VIP::
 
Аватар для Комбинатор
 
Регистрация: 12.04.2004
Адрес: подводная лодка ОфПомОчБар
Сообщения: 607

Комбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор Сэнсэй
Цитата:
конечно, гораздо проще понять как она работает и написать ее самому
именно это я и пытаюсь сделать

Цитата:
origImage = imread(<your_file1>); % Х
refImage = imread(<your_file2>); % У
refHist = hist(refImage, 256 ); % <- предполагается 256 уровней серого
newImage = histeq(origImage, refHist);
такой код и я написал
только 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.
Комбинатор вне форума  
Старый 28.04.2007, 11:05     # 24
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
В результате шагов 1-4 ты получаешь монотонно растущую (!)функцию "интеграла" нормализованной гистограммы референса. И такую же монотонно растущую функцию "интеграла" гистограммы оригинала. То есть по оси Х цвет, а по оси У - сколько процентов пикселов с цветом меньшим или равным данному. Теперь тебе надо подогнать оригинал под референс. В твоем случае первый значения в оригинале появляются в районе "цвета" 240 - 9000 пикселов с таким цветом. на гистограмме референса ты смотришь на каком цвете у тебя накопилось 9000 пикселов (допустим 40) - значит всем пикселам с цветом 240 с оригинала присваиваешь цвет 40. Затем берешь цвет 241 - снова 9000 пикселов. Значит на графике "интеграла" будет 18000. Смотришь на референсе какой цвет сответсвует 18000 - скажем 80. Всем пикселям с цветом 241 присваиваешь 80. И так далее.
Это для конкретного случая что ты привел, когда размеры картинок одинаковы. Шаг 3 (нормализация) позволяет сравнивать картинки разных размеров - убирает зависимость от реального размера картинки, и оставляет лишь процентную зависимость.
Удачи.

Последний раз редактировалось crawler; 28.04.2007 в 11:11.
crawler вне форума  
Старый 29.04.2007, 21:53     # 25
Комбинатор
::VIP::
 
Аватар для Комбинатор
 
Регистрация: 12.04.2004
Адрес: подводная лодка ОфПомОчБар
Сообщения: 607

Комбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор СэнсэйКомбинатор Сэнсэй
Цитата:
Сообщение от crawler Посмотреть сообщение
В твоем случае первый значения в оригинале появляются в районе "цвета" 240 - 9000 пикселов с таким цветом. на гистограмме референса ты смотришь на каком цвете у тебя накопилось 9000 пикселов (допустим 40) -
а тут получается что на гистограме референса нет значения 9000 там максимальное значение ~220
что делать в этом случае?

даже если нормализирую две аккумулятивные гистограммы(пункт 3 в алгоритме) тоесть в одной и второй
значения от нуля до 1 то все равно там значения точно не совпадают

или я не правильно понял как делать надо ?
Комбинатор вне форума  
Старый 30.04.2007, 10:14     # 26
crawler
Full Member
 
Регистрация: 11.12.2002
Сообщения: 864

crawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собойcrawler Имеются все основания чтобы гордиться собой
Ты смотришь на саму гистограмму что ли на интеграл (cumsum) смотри гистограммы. Сама гистограмма - это сколько точек имеет какой цвет. А кумулятивная гистограмма (интеграл) - это сколько точек имееют цвет меньший либо равный К.
У тебя гистограмма референса ровная. 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.
crawler вне форума  
Старый 15.02.2012, 14:15     # 27
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Я матлаб незнаю, но

while i<=length(str)
...
i=i+1;
это перебор чисел от i до количества символов в стринге.

if (str(i)~=' ')
проверка символа на текущей позиции.

в зависимости от результата проверки делаются присвоения переменным.
EvroStandart вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 02:08.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.