Russian Qt Forum
Ноябрь 24, 2024, 20:21
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Qwt. Отображение спектрограммы
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Qwt. Отображение спектрограммы (Прочитано 4401 раз)
Akon
Гость
Qwt. Отображение спектрограммы
«
:
Май 25, 2014, 19:09 »
Имеем QwtPlot и QwtPlotSpectrogram. По вертикали имеется порядка 4000 точек. Нужно отобразить горизонтальную линию шириной в 1 точку. Проблема в том, что она исчезает при отображении из-за того, что слишком тонкая. Какие могут быть предложения?
Записан
Akon
Гость
Re: Qwt. Отображение спектрограммы
«
Ответ #1 :
Май 27, 2014, 07:45 »
Проблема, очевидно, в том, что при интерполяции эта линия исчезает. Тогда вопрос: какие известные методы интерполяции изображений можно применить в данном случае? Конечно, я могу легко придумать подходящий мне метод (и это скорее всего будет так), просто хочу знать что применяется в таких случаях, как это называется (терминология).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Qwt. Отображение спектрограммы
«
Ответ #2 :
Май 27, 2014, 08:26 »
Цитата: Akon от Май 27, 2014, 07:45
Проблема, очевидно, в том, что при интерполяции эта линия исчезает.
Неясно что понимается под "интерполяцией" в данном случае. Я понял что высота 4K масштабится в гораздо меньшую (видимых пикселей), в результате тонкая линия исчезает. Теоретически на увеличение лучше всего bicubic, на уменьшение bilinear. Можно и по-народному: при уменьшении изображения задать большой вес данному цвету. Но все это подразумевает что Вы сами будете масштабить (из одного буфера пикселей в другой). Я бы с этим не связывался - проще отрисовать поверх или дать бОльшую толщину с учетом масштаба.
Записан
Akon
Гость
Re: Qwt. Отображение спектрограммы
«
Ответ #3 :
Май 27, 2014, 10:48 »
Да, вы точно все поняли. Это все в контексте Qwt. Там есть класс QwtRasterMatrixData, который имеет два метода: ResampleMode { NearestNeighbour, BilinearInterpolation }. Ни тот ни другой не работают (в смысле линия исчезает). Поэтому, я буду вынужден делать свой метод, который будет работать точно как вы сказали (с весом, "по-народному").
Если обрисовать задачу предметно, то, например, пусть имеем 10 точек {0 1 0 1 0 1 9 0 1 1} из которых формируется 1 пиксель экрана. Среднее значение равно 14, т.е. "средняя" интенсивность цвета пикселя равена 1.4. Т.е. 9-ка как бы "исчезает". Мне же нужно, используя нелинейный вес как функцию интенсивности цвета точки, получить, например, 8.5.
Так вот, возможно, что все эти нелинейности в контексте теории обработки изображений определены (может быть с учетом особенностей человеческого восприятия) и имеют соответствующие названия и т.п.
И еще вопрос, связанный с человеческим восприятием. Допустим имеем квадрат 10x10 пикселей:
0 1 0 1 0 1 9 0 1 1
0 1 0 1 0 1 9 0 1 1
...
0 1 0 1 0 1 9 0 1 1
С некоторого расстояния этот пиксель увидится как еле различимое пятнышко. Какой у него будет цвет?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Qwt. Отображение спектрограммы
«
Ответ #4 :
Май 27, 2014, 14:19 »
Цитата: Akon от Май 27, 2014, 10:48
Если обрисовать задачу предметно, то, например, пусть имеем 10 точек {0 1 0 1 0 1 9 0 1 1} из которых формируется 1 пиксель экрана. Среднее значение равно 14, т.е. "средняя" интенсивность цвета пикселя равена 1.4. Т.е. 9-ка как бы "исчезает". Мне же нужно, используя нелинейный вес как функцию интенсивности цвета точки, получить, например, 8.5.
Можно напр взять корень из суммы квадратов или просто поставить вместо 9 большое число - но попрет алиас. Если буфер на руках, то лучше "размазать" 9 в буфере по колокольчику, в результате напр {0 1 0 1 4 7 9 7 4 1} а затем пусть Qwt масштабит.
Цитата: Akon от Май 27, 2014, 10:48
И еще вопрос, связанный с человеческим восприятием. Допустим имеем квадрат 10x10 пикселей:
0 1 0 1 0 1 9 0 1 1
0 1 0 1 0 1 9 0 1 1
...
0 1 0 1 0 1 9 0 1 1
С некоторого расстояния этот пиксель увидится как еле различимое пятнышко. Какой у него будет цвет?
Можно рассуждать так: с девяткой яркость 1.4, без нее 0.5. То есть девятка увеличила яркость почти в 3 раза
Инвертируем буфер 9, 8, 9, 8, 9, 8, 0, 9, 8, 8 = 0.76 яркость. А исходная 0.85. Т.е. нолик уменьшил яркость, но совсем ненамного (0.76 / 0.85).
Что подтверждается житейским опытом - белая линия на черном фоне смотрится ярко и жирно, а черная на белом - наоборот тонко
Записан
Akon
Гость
Re: Qwt. Отображение спектрограммы
«
Ответ #5 :
Май 27, 2014, 16:01 »
Спасибо за разъяснение.
Цитировать
то лучше "размазать" 9 в буфере по колокольчику
Да-да. Именно такие колокольчики меня и интересуют. Если не затруднит, можете поподробнее?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Qwt. Отображение спектрограммы
«
Ответ #6 :
Май 27, 2014, 16:26 »
Цитата: Akon от Май 27, 2014, 16:01
Да-да. Именно такие колокольчики меня и интересуют. Если не затруднит, можете поподробнее?
Я в таких случаях делаю так:
- задаю ширину полосы (напр 5 пикселей) и "хвостик" - напр 0.1 (это вес последнего размазанного, самый меньший). Форма колокола напр e ^ (k * x * x). Тогда находим k
х = 5 / 2 = 2.5 // половина полосы
0.1 = e ^ (k * x * x)
ln(0.1) = k * x * x
k = ln(0.1) / 6.25
И заполняю вектор весов для точек
= 1 (центр)
[1] = e ^ (k * 1 * 1)
[2] = e ^ (k * 2 * 2)
[3] = e ^ (k * 3 * 3)
Можно еще др форму вместо квадрата, тогда k * x ^ n, но обычно в этом нет необходимости
Записан
Akon
Гость
Re: Qwt. Отображение спектрограммы
«
Ответ #7 :
Май 27, 2014, 21:19 »
Спасибо, принял к сведению.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...