Сглаживание: предпочтительные способы определения максимальной частоты? - PullRequest
4 голосов
/ 26 февраля 2009

Я немного читал об антиалиасинге, и это, кажется, имеет смысл, но есть одна вещь, в которой я не слишком уверен. Как именно вы найдете максимальную частоту сигнала (в контексте графики).

Я понимаю, что есть более одного случая, поэтому я предполагаю, что есть более одного ответа. Но сначала позвольте мне сформулировать простой алгоритм, который, как мне кажется, будет представлять максимальную частоту, чтобы кто-то мог сказать мне, если я неправильно понимаю его концепцию.

Допустим, это для одномерного, конечного и полутонового изображения (в пикселях). Правильно ли я полагаю, что вы можете просто сканировать всю линию пикселей (в пространственной области) в поисках минимального колебания, и обратная величина этого наименьшего колебания будет максимальной частотой?

Ex значения {23,26,28,22,48,49,51,49}

Частота: относится к множеству {}

(1/2) = .5: {28,22}

(1/4) = .25: {22,48,49,51}

Так .5 будет максимальной частотой?

И каков был бы идеальный способ рассчитать это для линии пикселей, аналогичной приведенной выше?

И на более теоретической ноте, что, если ваш выборочный вход был бесконечен (больше как реальный мир)? Будет ли действительный процесс примерно таким:

Predetermine a decent interval for point sampling
Determine max frequency from point sampling
while(2*maxFrequency >  pointSamplingInterval)
{
pointSamplingInterval*=2
Redetermine maxFrequency from point sampling (with new interval)
}

Я знаю, что эти алгоритмы чреваты неэффективностью, так каковы некоторые из предпочтительных способов? (Не ищите чего-то сумасшедшего оптимизатора, просто принципиально лучшие концепции)

Ответы [ 4 ]

2 голосов
/ 13 декабря 2009

Вы не сканируете сигнал на самую высокую частоту, а затем выбираете частоту дискретизации: вы выбираете частоту выборки, которая достаточно высока для захвата того, что вы хотите захватить, а затем вы фильтруете сигнал удалить высоких частот. Вы отбрасываете все, что превышает половину частоты дискретизации , прежде чем вы производите выборку.

Правильно ли я считаю, что вы могли бы просто отсканируйте всю линию пикселей (в пространственная область) ищет для минимальное колебание и инверсия этого наименьшего колебания будет максимальная частота?

Если у вас есть линия пикселей, то выборка уже сделана. Слишком поздно применять фильтр сглаживания. Наибольшая частота, которая может присутствовать, равна половине частоты дискретизации (я думаю, "1 / 2px").

И на более теоретической ноте, что если ваш выборочный вход был бесконечным (больше похоже на реальный мир)?

Да, именно тогда вы используете фильтр. Во-первых, у вас есть непрерывная функция, такая как реальное изображение (бесконечная частота дискретизации). Затем вы фильтруете его, чтобы удалить все, что выше fs / 2, а затем сэмплируете его в fs (оцифруйте изображение в пиксели). Камеры на самом деле не выполняют никакой фильтрации, поэтому вы получаете Муаровые узоры , когда фотографируете кирпичи и т. Д.

alt text

Если вы сглаживаете компьютерную графику, вам сначала нужно подумать об идеальной непрерывной математической функции, а также подумать, как бы вы ее отфильтровали и оцифровали, чтобы получить вывод на экран.

Например, если вы хотите создать прямоугольную волну с помощью компьютера, вы не можете просто наивно переключаться между максимальным и минимальным значениями. Это было бы похоже на выборку реального сигнала без предварительной фильтрации. Высшие гармоники возвращаются в основную полосу и вызывают много паразитных всплесков в спектре. Вам нужно сгенерировать точки, как если бы они были отобраны из отфильтрованной непрерывной математической функции:

alt text

2 голосов
/ 27 февраля 2009

Правильный подход к этому - использование преобразования Фурье (на практике БПФ или быстрое преобразование Фурье )

Теория работает следующим образом: если у вас есть набор пикселей с цветом / оттенками серого, то мы можем сказать, что изображение представлено пикселями в «пространственной области»; то есть каждое отдельное число определяет изображение в определенном пространственном местоположении.

Однако, что мы действительно хотим, так это представление изображения в «частотной области». Вместо каждого отдельного числа, указывающего каждый пиксель, каждое число представляет амплитуду определенной частоты в изображении в целом.

Инструментом, который преобразует из «пространственной области» в «частотную область», является преобразование Фурье. Выходной сигнал FT будет представлять собой последовательность чисел, определяющих относительный вклад различных частот.

Чтобы найти максимальную частоту, вы выполняете FT и смотрите на амплитуды, которые вы получаете для высоких частот, - это просто вопрос поиска от самой высокой частоты до тех пор, пока вы не достигнете своей «минимально значимой амплитуды». «порог.

Вы можете кодировать свой собственный FFT, но на практике гораздо проще использовать предварительно упакованную библиотеку, такую ​​как FFTW

1 голос
/ 27 февраля 2009

Я думаю, что эта статья с сайта O'Reilly также может быть полезна для вас ... http://www.onlamp.com/pub/a/python/2001/01/31/numerically.html ... там они имеют в виду частотный анализ звуковых файлов, но вам она дает вам идею .

0 голосов
/ 27 февраля 2009

Я думаю, что вам нужно приложение Фурье-анализа (http://en.wikipedia.org/wiki/Fourier_analysis).. Я изучал это, но никогда не использовал его, поэтому возьмите его с щепоткой соли, но я верю, что если вы правильно примените его к своему набору числа вы получите набор частот, которые являются компонентами серии, а затем вы можете выбрать самую высокую.

Я не могу указать вам фрагмент кода, который делает это, но я уверен, что он где-то там будет.

...