![]() |
|
|
![]()
|
|
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: нет Всего: 1 |
Всем привет!
Пытаюсь разобраться с бикубической интерполяцией.необходима для уменьшения изображения. Интересует скорее теория чем код, но и код лишним не будет вот для наглядности есть изображение, большое(исходник), из него делаем маленькое(результат). для этого: 1. выбираем в соответствии с масштабом пиксели на исходнике. (в примере 2 пикселя, для простоты примера) 2. выбираем соседние 16 близлежащих пикселей. 3. вычисляем результирующий цвет. интересует следующее. на шаге 2 какие "отступы" использовать для отбора пикселей-соседей? видно что многие окружные пиксели на исходнике в просчетах не учавствуют, а это негативно скажется на результате, если в исходнике много деталей. спасибо Это сообщение отредактировал(а) Emura - 17.11.2009, 01:23 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 5 Всего: 121 |
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: нет Всего: 1 |
W4FhLF,
и там смотрел тоже и не там смотрел, не математик, так как понял пояснил в первом посте. дальше чтото ступор в тех моментах которые указал. |
|||
|
||||
| Pavia |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
Сканируем новое изображение.
Нам нужно перевести новые координаты в старые. Введем систему координат мне нравится так. 0,0 расположим в верхнем левом углу. Wn,Hn в правом нижнем углу нового изображения. W,H в правом нижнем углу старого изображения. Теперь перевод из старых координат в новые делается так xn:=x*Wn/W, yn:=y*Hn/H Из новых в старые x:=xn*W/Wn, y:=yn*H/Hn Теперь что касается пикселей. Они имеют размеры, их форма это квадрат. А цвет пикселя это интегральное значение интенсивности света. Интеграл по площади пикселя. При масштабировании площадь пикселя меняется. Теперь надеюсь понятно что координаты центра пикселя на самом деле имеют дробное значение. 0.5, 1.5, 2.5 и тд (W-1)+0.5 Это соответствует нулевому, первому и тд. Если бы ты увеличивал изображение, то все просто. Увеличение в k=2 раза. Wn=k*W, Hn=k*H; Рассмотрим на примере пикселя с координатами (3,3) на новом изображение Это значит что пиксель располагается в координатах верхний левый угол (3,3) до нижний правый (4,4). центр (3.5,3.5) Пересчитаем в старые координаты. 3*1/k=3/2=1.5 4*1/k=4/2=2 центр 3.5*1/k=3.5/2=1,75 Нам надо как то посчитать интегральчик на старом изоброжении с координатами от верхний левый угол (1.5,1.5) до нижний правый (2,2). Понятно что в этом случае для нахождения яркости пикселя надо брать ближайшие пиксели к этой координате. Для линейной интерполяции надо 4 соседних пикселя для кубической 16. И тут точность будет заметна. Вернемся к уминьшению картинки. Теперь все поменялось. И тут уже не важно какую интерполяцию ты будешь использовать. К примеру мы уменьшаем картинку в 2.1 раза. Это значит что ты захватишь 1 пиксель целиком и 2 кусочка от других. Тут уже не так важна точность, но тоже можно попробовать интерполяцию. Для интерполяции потребуется захватывать не 16, а больше пикселей. Ну центральные те которые целиком поподают в интерполяции не нуждаются, а награнице решать придется. Собственно в начале надо построить сплайн. Кусочный кубический многочлен и уже из него выбирать, то что нужно. |
|||
|
||||
| Emura |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: нет Всего: 1 |
Pavia,
Огромное спасибо за ответ! буду разбираться. |
|||
|
||||
| Анни |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 23.4.2010 Репутация: нет Всего: нет |
Emura, ты писал, что пытаешься разобратся с бикубической интерполяцией для уменьшения размеров картинки. У меня это тема бакалаврской работы. Ты не мог бы помоч мне в этом, не за просто так, конечно! Пожалуйста!!!
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |