Что означает «частота» на изображении? - Фотопедия
12 голосов
/

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

Я также хотел бы понять результаты дискретных преобразований Фурье, например, как правильно их читать.

Было бы здорово, если бы кто-то мог объяснить мне следующее:

  1. Что такое частоты на картинках и как они определены?

  2. Как вы читаете результат дискретного преобразования Фурье?

Ответы [ 3 ]

25 голосов
/

Я отвечу только на первый вопрос: Какие частоты на изображениях?

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

То же самое относится к изображениям. Вы можете думать о том, что изображение состоит из различных волн или частот. Чтобы создать свое изображение, начните со среднего цвета (на самом деле думать о полутоновых изображениях легче). Затем добавьте волны различной длины и силы волны, чтобы постепенно создавать детали на картинке.

Исходное изображение: Source Image

Первая частота (средняя): Average

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

Здесь вы можете видеть вторую частоту по горизонтали, вертикали и диагонали. Обратите внимание, что вы можете разобрать, где будет гора (темная) и где будет небо и озеро (светлее).

Вторая частота: First Component

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

Третья частота: Third

Интересно, что объем информации в этом представлении одинаков, и можно переходить между обычными изображениями (пространственная область) и изображениями с преобразованием Фурье (частотная область). В частотной области нам необходимо хранить информацию обо всех частотах, а также информацию об амплитуде и фазе.

Здесь используется 50% частот: 50%

Существуют варианты всего этого с различиями между рядами Фурье, преобразованием Фурье и дискретным преобразованием Фурье и дискретным косинусным преобразованием (DCT).

Одно интересное приложение заключается в использовании алгоритмов сжатия, таких как JPEG. Здесь DCT используется для сохранения большего количества важных частей изображения (низких частот) и меньшего количества высоких частот.

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

Анимированные

Извините, размер GIF составляет 5 МБ, поэтому я не могу его здесь включить. Вот ссылка или запустите код, чтобы сгенерировать его самостоятельно. РЕДАКТИРОВАТЬ: Ссылка вниз, вот еще один, сгенерированный Томас Devoogdt: https://vimeo.com/197219508/description


Использование частот в постобработке

Существует множество методов, которые основаны на частотах для постобработки, в основном потому, что мы никогда не смотрим на отдельные пиксели по отдельности. Многие алгоритмы работают на частоте, потому что о них более естественно думать. Но также потому, что преобразование Фурье содержит ту же информацию, мы можем выразить любую математическую операцию (или шаг последующей обработки) в частотной и пространственной областях! Иногда попиксельное описание лучше, но часто частотное описание лучше. (Лучше, прежде всего, значит быстрее в этом контексте.)

Одна техника, которую я хотел бы указать без особой причины, за исключением того, что это художники, работающие непосредственно с частотами, а именно * разделение частот *. Я не буду описывать это, но вы можете увидеть, как это работает на YouTube для Photoshop и GIMP.

Вы создаете два слоя, один с низкими частотами и один с высокими частотами. Для портретов вы можете делать сглаживание кожи на высоких частотах, не затрагивая тона кожи на низких частотах.

Код

Это некоторый код для генерации приведенных выше примеров. Его можно запустить как простую программу на Python.

from PIL import Image
from numpy.fft import rfft2, irfft2
import numpy as np

def save_dims(ft, low, high, name):
    ft2 = np.zeros_like(ft)
    # copy the frequencies from low to high but all others stay zero.
    ft2[low:high, low:high] = ft[low:high, low:high]
    save(ft2, name)

def save(ft, name):
    rft = irfft2(ft)
    img = Image.fromarray(rft)
    img = img.convert('L')
    img.save(name)

def main():
    # Convert input into grayscale and save.
    img = Image.open("input.jpg")
    img = img.convert('L')
    img.save('input_gray.png')
    # Do Fourier Transform on image.
    ft = rfft2(img)
    # Take only zeroth frequency and do Inverse FT and save.
    save_dims(ft, 0, 1, 'output_0.png')
    # Take first two frequencies in both directions.
    save_dims(ft, 0, 2, 'output_1.png')
    save_dims(ft, 0, 3, 'output_2.png')
    # Take first 50% of frequencies.
    x = min(ft.shape)
    save_dims(ft, 0, x/2, 'output_50p.png')

def generateGif():
    ''' Generates images to be later converted to a gif.
    This requires ImageMagick:
    convert -delay 100 -loop 0 output_*.png animation.gif
    '''
    # Requires images2gif from code.google.com/p/visvis/source/browse/vvmovie/images2gif.py 
    # from images2gif import writeGif

    img = Image.open('input.jpg')
    img = img.convert('L')
    # Resize image before any calculation.
    size = (640,480)
    img.thumbnail(size, Image.ANTIALIAS)
    ft = rfft2(img)

    images = []
    for x in range(0, max(ft.shape)):
        ft2 = np.zeros_like(ft)
        ft2[0:x, 0:x] = ft[0:x,0:x]
        rft = irfft2(ft2)
        img_out = Image.fromarray(rft).convert('L')
        fname = 'animation/output_%05d.jpg' %(x, )
        img_out.save(fname, quality=60, optimize=True)

    #writeGif('animation.gif', images, duration=0.2)


if __name__=='__main__':
    main()
    #generateGif()
2 голосов
/

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

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

Когда мы говорим о DCT и FFT и других подобных преобразованиях, мы обычно делаем их на части изображения (например, для сжатия JPEG, обнаружения краев и т. Д.). Поэтому имеет смысл говорить о преобразованиях в контексте блока преобразования заданного размера.

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

Мы могли бы произвольно назвать эту частоту "1" - 1 цикл на 32 пикселя, то есть. Я смутно вспоминаю, что это обычно называется θ в учебниках по преобразованию, или, может быть, θ / 2, но я могу помнить неправильно. В любом случае, мы пока назовем это 1, потому что это действительно произвольно в абсолютном смысле; важно соотношение между частотами в относительном смысле. : -)

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

Если бы мы хотели воспроизвести эти простые изображения, мы могли бы буквально сказать, что каждая строка состоит из сигнала с частотой 1 или 2, и вы бы знали, как выглядят изображения. Если изображения стали черными до 50% серого, вы могли бы сделать то же самое, но вы должны были бы сказать, что они имели частоту 1 или 2 при интенсивности 50%.

Реальные изображения, конечно, не просто градиент. Изображение меняется часто, а не периодически при сканировании слева направо. Тем не менее, в достаточно маленьком блоке (например, 8 пикселей, 16 пикселей) вы можете аппроксимировать этот ряд пикселей как сумму последовательности сигналов, начиная со среднего значения пикселей в строке, за которым следует величина " Частота 0,5 "сигнала (черный на одной стороне, затемнение к белому) для смешивания (или с отрицательным значением, количества этого сигнала для вычитания), за которым следуют значения частоты 1, частоты 2, частоты 4 и т. д. .

Теперь изображение уникально тем, что оно имеет частоту в обоих направлениях; он может становиться все светлее и темнее при движении как по горизонтали, так и по вертикали. По этой причине мы используем 2D-преобразования DCT или FFT вместо 1D. Но принцип все еще в основном тот же. Вы можете точно представить изображение 8x8 с сеткой 8x8 из блоков одинакового размера.

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

Что касается того, как читать результаты преобразования, это зависит от того, смотрите ли вы на 1D преобразование или 2D преобразование. Для одномерного преобразования у вас есть ряд бинов. Первый - это среднее значение всех входных значений. Второе - это количество добавляемого сигнала частоты 1, третье - это количество добавляемого сигнала частоты 2 и т. Д.

Для 2D-преобразования у вас есть сетка значений n x n . Верхний левый угол, как правило, является средним, и когда вы идете в горизонтальном направлении, каждое ведро содержит количество сигнала, который нужно смешать с горизонтальной частотой 1, 2, 4 и т. Д., А когда вы идете в вертикальном направлении, он количество сигнала для смешивания с частотой вертикальной развертки 1, 2, 4 и т. д.

Это, конечно, полная история, если вы говорите о DCT; напротив, каждая ячейка для БПФ содержит действительные и мнимые части. БПФ по-прежнему основывается на той же базовой идее (своего рода), за исключением того, что способ отображения частот на бункеры отличается, а математика более привлекательная. : -)

Конечно, наиболее распространенная причина для генерации такого рода преобразований состоит в том, чтобы затем сделать еще один шаг и выбросить некоторые данные. Например, DCT используется в сжатии JPEG. При чтении значений в зигзагообразной схеме, начиная с верхнего левого угла (среднее значение) и перемещаясь в нижний правый угол, в первую очередь записываются наиболее важные данные (средняя и низкочастотная информация), за которыми следуют постепенно увеличивающиеся данные частоты. В какой-то момент вы в основном говорите «это достаточно хорошо» и выбрасываете данные с самой высокой частотой. Это существенно сглаживает изображение, отбрасывая его мелкие детали, но все равно дает примерно правильное изображение.

И IIRC, FFT также иногда используются для обнаружения краев, где вы отбрасываете все, кроме высокочастотных компонентов, в качестве средства обнаружения областей с высокой контрастностью на острых кромках.

У National Instruments есть хорошая статья , которая объясняет это с помощью картинок. : -)

0 голосов
/

Чтение результатов двумерного БПФ это ... Ну, сложно. В основном потому, что выходные данные находятся в области комплексных чисел.

Я не могу дать вам очень подробное описание, потому что я сам почти все забыл, но в основном у вас есть разложение, выраженное в виде суммы ряда экспонент мнимых чисел.

Существуют частотные преобразования, которые более полезны для обработки изображений, чем DFT, такие как косинусное преобразование (например, используемое в кодировании JPEG, которое имеет только реальные коэффициенты) и различные виды вейвлетов.

Добро пожаловать на сайт Фотопедия, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...