Що означає "частота" на зображенні?


30

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

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

Було б здорово, якби хтось міг пояснити мені таке:

  1. Що таке частоти на зображеннях і як вони визначаються?

  2. Як ви читаєте результат дискретного перетворення Фур'є?



дякую, я вже читав це, це мені допомогло, але я все ще трохи зрозумілий.
Якоб Абфальтер

Відповіді:


44

Я відповім лише на перше запитання: Що таке частоти в зображеннях?

Трансформація Фур'є - це математична методика, коли однакова інформація зображення представлена ​​не для кожного пікселя окремо, а для кожної частоти. Подумайте про це таким чином. У морі є хвилі, деякі з яких дуже повільно рухаються (як припливи), інші мають середні розміри, а деякі інші крихітні, як брижі, утворені від пориву. Ви можете вважати їх трьома окремими хвилями, але в кожній точці моря та моменту часу ви отримуєте лише одну висоту води.

Те саме стосується зображень. Ви можете подумати, як зображення складається з різних хвиль чи частот. Щоб створити своє зображення, почніть із середнього кольору (насправді думати про зображення сірого масштабу простіше). Потім додайте хвилі різної довжини хвилі та сили, щоб повільно нарощувати деталі на малюнку.

Зображення джерела:

Зображення джерела

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

Середній

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

Тут ви можете побачити другу частоту по горизонталі та вертикалі. Зауважте, що ви можете зрозуміти, де буде гора (темна) та де буде небо та озеро (світліше).

Друга частота:

Перший компонент

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

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

Третя

Цікаво, що кількість інформації в цьому поданні однакова, і можна переходити між звичайними зображеннями (просторовий домен) та перетвореннями Фур'є (зображення частоти). У частотній області нам потрібно зберігати інформацію всіх частот разом з амплітудою та фазовою інформацією.

Тут використовується 50% частот:

50%

Існують варіанти всього цього, з якими слід розрізняти серії Фур'є, Фур'є-трансформацію та дискретні перетворення Фур'є та дискретні косинусні трансформації (DCT).

Одне цікаве додаток полягає у використанні алгоритмів стиснення, таких як JPEG. Тут DCT використовується для збереження більшої частини важливих частин зображення (низьких частот) і менше високих частот.

Я написав це, сподіваючись, що читачі-початківці зможуть отримати базове розуміння ідеї перетворень Фур'є. Для цього я зробив деякі спрощення, які, сподіваюсь, просунуті читачі мені пробачать.

Анімовані

Відео, створене Томасом Девогдтом, можна переглянути у Vimeo .

анімований


Частоти післяобробки

Існує чимало методів, які покладаються на частоти для пост-обробки, в основному тому, що ми ніколи не дивимося на окремі пікселі окремо. Багато алгоритмів працюють за частотою, тому що природніше думати про них таким чином. Але також тому, що перетворення Фур'є містить ту саму інформацію, ми можемо виразити будь-яку математичну операцію (або етап обробки) у частотних та просторових областях! Іноді опис пікселів краще, але часто опис частоти краще. (Краще насамперед означає швидше в цьому контексті.)

Я хотів би зазначити одну техніку без особливих причин, за винятком того, що це художники, що працюють безпосередньо з частотами, і це * розділення частоти *. Я не збираюся описувати це, але ви можете побачити, як це працює на 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()

Слід уточнити, що, хоча теоретично ми могли, припускаючи, що ми маємо нескінченні знання про зображення під рукою, розкласти його на частоти компонентів і переробити його без втрат ... в реальному світі ми не можемо. Зведення образу реального світу, що відбувається на кожному "інтерфейсі" уздовж оптичного трубопроводу, є фактично незворотним процесом. Ми ніколи не можемо знати всіх факторів згортання, і тому реконструкція FFT назад у зображення складна, а екстремальні модифікації зазвичай призводять до артефактів та втрати даних.
jrista

@jrista Я думаю, що унапіедра замислювалась про зворотність - це те, що коли ви працюєте з цифровим зображенням (масивом пікселів на комп’ютері), ви можете перейти до частотного простору і назад та отримати те саме зображення, з яким ви почали. Ви дивитесь на більшу картину системи фізичних зображень (лінзи тощо), де втручаються обмеження реального світу.
співмешканець

3
Коментар jrista вводить в оману, оскільки FT звинувачують у втраті інформації. Звичайно, фотографія - це процес, що втрачає шкоду, і це також є післяобробкою. Якщо я перетворять дискретні зображення в простір Фур’є, проробляють там деяку втрату, а потім конвертують назад, звичайно, я втрачаю інформацію. Але це відбувається на етапі обробки, а не на етапі перетворення. Щоправда, через машинну точність кожна математична операція втрачає інформацію, але якщо ми говоримо про 8 біт на зображення каналу, ми не помітимо помилок точності машини.
Unapiedra

1
@Turkeyphant, я не пам'ятаю, чому я згадую діагональ у цьому контексті. Видно, що головним напрямком другої частоти здається саме ця діагональ. Можливо, саме тому. Щоб відповісти на ваше запитання, вам потрібні лише дві осі для зображення 2D-зображення. Важливо, щоб дві осі були ортогональними. Горизонтальна та вертикальна вісі відповідають цьому критерію. (Крім того, вони практичні.) Якщо дискретні зображення (тобто складаються з пікселів), згладжування зробить усі інші кути гіршими.
Унапіедра

1
@ Корекція туркіфанта, Унапіедра описав другу частоту , а не першу, як 0, -1, 0, +1, 0. Абзаци, що описують 2-ю частоту, одразу після зображення 1-ї частоти (рівномірне сіре зображення), і я можу подивіться, як може бути спокусно читати цей абзац як опис попереднього зображення (статті часто показують зображення, а потім описують його в тексті, що слідує за зображенням), але не в цьому випадку. =)
scottbb

9

Я спробую пояснити найпростішими математичними термінами. Якщо ви хочете пропустити математику, перейдіть до ІІ частини, якщо ви хочете отримати коротку відповідь, перейдіть до ІІІ частини

Частина I

Частота сигналу означає кількість випадків повторюваної події за одиницю часу. Отже, якщо одиниця часу становить секунди, то частота вимірюється Герц: 1 Гц = 1 / с. Таким чином, сигнал із частотою 100 Гц має схему, що повторюється 100 разів за секунду.

Найбільш базовий сигнал (з точки зору обробки сигналу) - синусовий сигнал.

y (t) = sin (2πft)

де f - частота цього синусового сигналу, а t - час. Якщо цей сигнал був звуковим і f становив близько 50 Гц, ви почуєте один дуже низький басовий тон. з більш високою частотою, як 15 кГц, це буде більш високий тон.

Тепер для узагальнення поняття сигнал може бути просторовим сигналом, а не тимчасовим сигналом ... як би ви малюєте синусову хвилю на аркуші паперу, вісь під назвою x вказує праворуч, а вісь y перпендикулярна до осі x.

y (x) = sin (2πfx)

де f - частота сигналу, а x - просторова змінна. f тут вже не вимірюється 1 / с, а 1 / (одиниця простору).

Фур’є, французький математик, показав, що можна генерувати будь-який сигнал, додаючи ряд синусоїдних і косинусних сигналів з різними амплітудами та частотами. Це називається аналіз Фур'є.

Використовуючи аналіз Фур'є, можна записати будь-яку функцію y (x) у вигляді суми синусоїдальних і косинусних сигналів з різними частотами, тому функцію y (x) можна переписати через декілька функцій, пов'язаних з частотою Y (f). Можна сказати, що y (x) = Some_Function (Y (f)). або Y (f) = Зворотний_О__Что_Функція (у (х))

Перетворення Фур'є - це функція F, яка перетворює сигнал із домену x у частотну область.

Y(f) = F( y(x) )

y(x) = F_inv(Y(f))

F - аналогова функція, дискретна перетворення Фур'є DFT - числове наближення F. Швидке перетворення Фур'є - це спосіб зробити DFT, оптимізований для швидкості.

Добре...

Частина ІІ

Тепер комп'ютерні зображення складаються з пікселів, і кожен піксель має значення інтенсивності для значень RGB, Green, Blue aka RGB. У зображеннях сірого масштабу інтенсивність для R, G, B будь-якого пікселя дорівнює, R = G = B = I, тому ми можемо говорити про I для зображень у градаціях сірого.

Зображення сірого масштабу 800px X 100px нижче було сформовано за допомогою I (x) = sin (2πfx), де f = 1 повторення / 800px = 0,00125 повторень / px

введіть тут опис зображення

Ви можете генерувати його самостійно за допомогою Python3

from PIL import Image, ImageDraw
from math import sin, pi

img = Image.new('RGB', (800,100), color='black')
draw = ImageDraw.draw(img)

#cacluate the frequency
n = 10 #repetitions
f = n/img.width #

#iterate of the width pixels
for x in range(img.width):
 #calculate the intensity i in that pixel x
 y = sin(2*pi*f*x - pi/2) #this will generate values between -1 and +1, -pi/2 is to make sure that i starts with value 0 in the next line.
 i = (255+255*y)/2 #shifting and scaling y so that the values are between 0 and 255
 draw.line((i,0,i,img.height), fill=(int(i),int(i),int(i)))

img.show()

Зображення в сірій шкалі 800px X 100px нижче було створено за допомогою I (x) = sin (2πfx), де f = 10 повторень / 800px = 0,0125 повторень / px

введіть тут опис зображення

Тепер легко помітити, що це зображення має горизонтальну частоту 10. Давайте збільшимо частоту в 10 разів, так що n = 100. f = 100/800 = 1/8 = 0,125 повторень / px:

введіть тут опис зображення

Як було сказано раніше, ви можете представляти будь-який сигнал (1D зображення в градаціях сірого) у вигляді суми ряду синусоїд (1D зображення сірого зображення) з різною частотою.

Частина ІІІ

Отже, 1D-зображення в градаціях сірого A має більш високі частоти, ніж інше зображення B в сірій області, якщо A має "більш тонкі" деталі.

Ви можете узагальнити цей принцип на кольорових 2D і навіть 3D зображеннях. Чим тонші "деталі" зображення, тим вище вміст частоти цього зображення.

Тож блакитне небо низької частоти порівняно із зображенням квітки.

Ви можете дізнатися більше про це, прочитавши про аналіз Фур’є та про цифрову обробку зображень.


4

Якщо коротко, частота стосується швидкості зміни. Точніше, частота - це зворотний період зміни, тобто кількість часу, необхідного для переходу від однієї яскравості (або будь-якої іншої) до іншої яскравості і назад. Чим швидше змінюється (наприклад, від світлого до темного), тим вище візуальна "частота", необхідна для представлення цієї частини зображення.

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

Коли ми говоримо про 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. Але принцип все одно в основному той самий. Ви можете точно зобразити зображення 8х8 за допомогою сітки 8х8 відроків однакового розміру.

Зображення також складніші через кольори, але ми поки що це будемо ігнорувати, і припустимо, що ми дивимось лише на одне зображення сірого масштабу, як ви могли б отримати, дивлячись на ізольований червоний канал фотографії.

Щодо того, як читати результати трансформації, це залежить від того, чи дивитесь ви на 1D або 2D перетворення. Для 1D перетворення у вас є ряд бункерів. Перший - це середнє значення всіх вхідних значень. Другий - кількість сигналу частоти 1, який потрібно додати, третій - кількість сигналу частоти 2, який потрібно додати, і т.д.

Для 2D перетворення у вас є сітка n x n значень. У верхньому лівому куті зазвичай це середнє значення, і, коли ви йдете в горизонтальному напрямку, кожне відро містить кількість сигналу для змішування з горизонтальною частотою 1, 2, 4 і т. Д. І, як ви йдете у вертикальному напрямку, це - кількість сигналу для змішування з вертикальною частотою 1, 2, 4 і т.д.

Це, звичайно, повна історія, якщо ви говорите про DCT; навпаки, кожен контейнер для FFT містить реальні та уявні частини. FFT все ще базується на одній і тій же базовій ідеї (роду), за винятком того, що спосіб відображення частот на біни відрізняється, а математика - хайєр. :-)

Звичайно, найпоширеніша причина для генерування таких видів перетворень полягає в тому, щоб потім піти на крок далі і викинути частину даних. Наприклад, DCT використовується при стисненні JPEG. Читаючи значення в зигзагоподібному шаблоні, починаючи з верхнього лівого кута (середній) та рухаючись до нижнього правого краю, найважливіші дані (інформація про середню та низьку частоту) отримують спочатку, після чого прогресують дані з більш високою частотою. У якийсь момент ви в основному говорите "це досить добре" і викидаєте дані найвищої частоти. Це по суті розгладжує зображення, викидаючи його дрібні деталі, але все одно дає приблизно правильне зображення.

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

У National Instruments є приємна стаття, яка пояснює це картинками. :-)


0

Уявіть, скануйте зображення по лінії за допомогою фотоелемента та подайте результати на плоттер (ці плоскі машини, які роблять чорні хвилі на папері), осцилоскоп (ці поля, які роблять мерехтливі зелені хвилі на екрані) або аналізатор спектру (великі поля, які зробити зелені або різнокольорові огорожі для пікетів). Або навіть гучномовець. Чим тонші структури зображення, тим вище будуть частоти (крок у гучномовці) сигналу, показаного / почутого. Чим більше контрасту в тонких структурах, тим вище буде амплітуда високочастотних частин сигналу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.