“ ความถี่” หมายถึงอะไรในภาพ


30

ฉันไม่เข้าใจวิธีการกำหนดความถี่ในภาพ / ภาพถ่าย เท่าที่ฉันเข้าใจแล้วในตอนนี้ความถี่สูงก็เหมือนของมีคมในภาพเช่นขอบหรือดังนั้นและความถี่ต่ำนั้นตรงกันข้าม

ฉันยังต้องการที่จะเข้าใจผลลัพธ์ของการแปลงฟูริเยร์แบบไม่ต่อเนื่องเช่นวิธีการอ่านอย่างถูกต้อง

มันจะเจ๋งถ้าใครสามารถอธิบายต่อไปนี้ให้ฉัน:

  1. ความถี่ในภาพคืออะไรและกำหนดไว้อย่างไร?

  2. คุณจะอ่านผลลัพธ์ของการแปลงฟูริเยร์แบบไม่ต่อเนื่องได้อย่างไร


ที่เกี่ยวข้อง: photo.stackexchange.com/questions/21762/…
coneslayer

ขอบคุณฉันได้อ่านสิ่งนี้แล้วมันช่วยฉันได้ แต่ฉันก็ยังไม่ค่อยรู้อะไรเลย
จาคอบ Abfalter

คำตอบ:


44

ฉันจะตอบคำถามแรกเท่านั้น: ความถี่ในภาพคืออะไร

การแปลงฟูริเยร์เป็นเทคนิคทางคณิตศาสตร์ที่แสดงข้อมูลภาพเดียวกันไม่ใช่สำหรับแต่ละพิกเซลแยกจากกัน แต่เป็นสำหรับแต่ละความถี่ คิดแบบนี้ ทะเลมีคลื่นซึ่งบางส่วนเคลื่อนไหวช้ามาก (เช่นกระแสน้ำ) อื่น ๆ มีขนาดปานกลางและบางส่วนก็เล็กเหมือนคลื่นที่เกิดจากความกระโชก คุณสามารถคิดว่าพวกมันเป็นคลื่นสามคลื่นแยกกัน แต่ในแต่ละจุดบนผิวน้ำทะเลและในช่วงเวลาหนึ่งคุณจะได้รับน้ำเพียงหนึ่งระดับ

เช่นเดียวกับภาพ คุณสามารถนึกถึงภาพที่เกิดขึ้นจากคลื่นหรือความถี่ต่าง ๆ ในการสร้างภาพของคุณเริ่มต้นด้วยสีเฉลี่ย (จริง ๆ แล้วคิดว่าภาพระดับสีเทานั้นง่ายกว่า) จากนั้นเพิ่มคลื่นที่มีความยาวและความแตกต่างของคลื่นเพื่อสร้างรายละเอียดในภาพอย่างช้าๆ

ภาพต้นฉบับ:

รูปภาพต้นฉบับ

ความถี่แรก (เฉลี่ย):

เฉลี่ย

ความถี่ที่สองตามแนวตั้งคือคลื่นที่เริ่มต้นที่ศูนย์ที่ด้านล่างของภาพเพิ่มขึ้นกลายเป็นศูนย์อีกครั้งตามขอบฟ้ากึ่งกลางและลดลงต่ำกว่าศูนย์ในที่สุดก็กลายเป็นศูนย์ที่ด้านบนของภาพ (ฉันอธิบายชุดฟูริเยร์โดยไม่มีการเลื่อนเฟส แต่การเปรียบเทียบยังคงมีอยู่)

ที่นี่คุณสามารถเห็นความถี่ที่สองตามแนวนอนและแนวตั้ง โปรดสังเกตว่าคุณสามารถกำหนดได้ว่าภูเขาจะอยู่ที่ไหน (มืด) และบริเวณที่ท้องฟ้าและทะเลสาบ (เบา)

ความถี่ที่สอง:

องค์ประกอบแรก

คลื่นหรือความถี่เพิ่มเติมแต่ละคลื่นจะนำระลอกคลื่นมากขึ้นและมีรายละเอียดมากขึ้น เพื่อให้ได้ภาพที่แตกต่างกันความสูงของคลื่น / แอมพลิจูดสามารถเปลี่ยนแปลงได้เช่นเดียวกับจุดเริ่มต้นของคลื่นที่เรียกว่าเฟส

ความถี่ที่สาม:

ที่สาม

น่าสนใจจำนวนข้อมูลที่เหมือนกันในการนำเสนอนี้และสามารถย้อนกลับไปมาระหว่างภาพปกติ (โดเมนเชิงพื้นที่) และภาพที่แปลงฟูริเยร์ (โดเมนความถี่) ในโดเมนความถี่เราต้องเก็บข้อมูลความถี่ทั้งหมดพร้อมกับแอมพลิจูดและข้อมูลเฟส

ที่นี่ใช้ 50% ของความถี่:

50%

มีความแตกต่างของทั้งหมดนี้ด้วยความแตกต่างที่จะทำในหมู่ฟูริเยร์ซีรีส์การแปลงฟูริเยร์และการแปลงฟูริเยร์แบบแยกและการแปลงโคไซน์ไม่ต่อเนื่อง (DCT)

แอปพลิเคชั่นที่น่าสนใจอย่างหนึ่งคือการใช้อัลกอริธึมการบีบอัดเช่น JPEG ที่นี่ DCT ใช้เพื่อบันทึกส่วนสำคัญของรูปภาพ (ความถี่ต่ำ) และความถี่สูงน้อยลง

ฉันเขียนสิ่งนี้ด้วยความหวังว่าผู้อ่านมือใหม่สามารถเข้าใจพื้นฐานของแนวคิดการแปลงฟูริเยร์ได้ สำหรับสิ่งที่ฉันทำเรียบง่ายที่ฉันหวังว่าผู้อ่านขั้นสูงจะให้อภัยฉัน

ภาพเคลื่อนไหว

วิดีโอที่สร้างโดยโทมัส Devoogdt สามารถดูได้ที่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()

มันควรจะมีความชัดเจนว่าในทางทฤษฎีเราสามารถสมมติว่าเรามีความรู้ที่ไม่มีที่สิ้นสุดของภาพที่อยู่ในมือสลายตัวมันเพื่อความถี่ส่วนประกอบและ recompose มันโดยไม่สูญเสีย ... ในโลกแห่งความจริงเราไม่สามารถ การแปลงภาพโลกแห่งความเป็นจริงซึ่งเกิดขึ้นที่ "ส่วนต่อประสาน" ตามแนวท่อส่งแสงนั้นเป็นกระบวนการที่กลับไม่ได้อย่างมีประสิทธิภาพ เราไม่เคยรู้ว่าปัจจัยการโน้มน้าวใจทั้งหมดและการสร้าง FFT กลับเข้ามาในภาพนั้นยากและการแก้ไขที่รุนแรงมักส่งผลให้สิ่งประดิษฐ์และข้อมูลสูญหาย
jrista

@ Crista ฉันคิดว่าจุดที่ Unapiedra กำลังทำเกี่ยวกับการย้อนกลับคือเมื่อคุณทำงานกับภาพดิจิทัล (อาร์เรย์พิกเซลบนคอมพิวเตอร์) คุณสามารถไปที่พื้นที่ความถี่และด้านหลังและรับภาพเดียวกันกับที่คุณเริ่มต้นด้วย คุณกำลังดูภาพที่ใหญ่ขึ้นของระบบการถ่ายภาพทางกายภาพ (เลนส์และอื่น ๆ ) ที่ซึ่งข้อ จำกัด ในโลกแห่งความจริงบุกรุก
coneslayer

3
ความคิดเห็นของ jrista นั้นทำให้เข้าใจผิดว่า FT นั้นถูกกล่าวหาว่าทำให้ข้อมูลสูญหาย แน่นอนว่าการถ่ายภาพนั้นเป็นกระบวนการที่สูญเสียดังนั้นกระบวนการหลังการประมวลผล ถ้าฉันแปลงภาพแยกเป็น Fourier Space ให้ทำการประมวลผลแบบ lossy ที่นั่นแล้วแปลงกลับแน่นอนว่าฉันสูญเสียข้อมูล แต่มันเกิดขึ้นในขั้นตอนการประมวลผลและไม่ได้อยู่ในขั้นตอนการแปลง จริงเนื่องจากความแม่นยำของเครื่องจักรการดำเนินการทางคณิตศาสตร์ทุกครั้งจะสูญเสียข้อมูล แต่ถ้าเราพูดถึงรูปภาพ 8 บิตต่อแชนเนลเราจะไม่สังเกตเห็นข้อผิดพลาดที่แม่นยำของเครื่อง
Unapiedra

1
@Turkeyphant ฉันจำไม่ได้ว่าทำไมฉันถึงพูดเส้นทแยงมุมในบริบท คุณจะเห็นได้ว่าทิศทางหลักของความถี่ที่สองนั้นน่าจะเป็นแนวทแยงนั้น บางทีนั่นอาจเป็นเหตุผล ในการตอบคำถามของคุณคุณต้องใช้สองแกนเท่านั้นในการแสดงภาพ 2D เป็นสิ่งสำคัญที่แกนทั้งสองเป็นมุมฉาก แกนแนวนอนและแนวตั้งตอบสนองเกณฑ์ที่กำหนด (นอกจากนี้ยังใช้งานได้จริง) เมื่อใช้ภาพแยก (เช่นประกอบด้วยพิกเซล) การใช้นามแฝงจะทำให้มุมอื่น ๆ แย่ลง
Unapiedra

1
@ การแก้ไขรหัสกุญแจไก่งวง Unapiedra อธิบายความถี่ที่สองไม่ใช่ครั้งแรกเป็น 0, -1, 0, +1, 0 ย่อหน้าที่อธิบายความถี่ที่ 2 นั้นทันทีหลังจากภาพความถี่ที่ 1 (ภาพสีเทาสม่ำเสมอ) และฉันสามารถ ดูว่ามันอาจจะน่าดึงดูดให้อ่านย่อหน้านั้นเป็นคำอธิบายของภาพก่อนหน้า (บทความมักจะแสดงภาพแล้วอธิบายในข้อความตามภาพ) แต่ไม่ใช่ในกรณีนี้ =)
scottbb

9

ฉันจะพยายามอธิบายด้วยคำศัพท์ทางคณิตศาสตร์ที่ง่ายที่สุดเท่าที่จะเป็นไปได้ หากคุณต้องการข้ามคณิตศาสตร์ข้ามไปยังส่วนที่สองหากคุณต้องการได้รับคำตอบสั้น ๆ ข้ามไปยังส่วนที่สาม

ส่วนที่ 1

ความถี่ของสัญญาณหมายถึงจำนวนการเกิดเหตุการณ์ซ้ำต่อหน่วยเวลา ดังนั้นหากหน่วยเวลาเป็นวินาทีความถี่จะถูกวัดด้วย Herz: 1Hz = 1 / s สัญญาณที่มี 100Hz จะมีรูปแบบที่ซ้ำ 100 ครั้งต่อวินาที

สัญญาณพื้นฐานที่สุด (จากมุมมองของการประมวลผลสัญญาณ) เป็นสัญญาณไซนัส

y (t) = sin (2πft)

โดยที่ f คือความถี่ของสัญญาณไซนัสนี้และ t คือเวลา หากสัญญาณนี้เป็นเสียงและ f อยู่ที่ประมาณ 50Hz คุณจะได้ยินเสียงเบสที่ต่ำมาก ด้วยความถี่ที่สูงขึ้นเช่น 15kHz มันจะเป็นเสียงที่สูงขึ้น

ทีนี้เพื่อสรุปแนวความคิดสัญญาณอาจเป็นสัญญาณพิเศษแทนที่จะเป็นสัญญาณชั่วขณะ ... ราวกับว่าคุณวาดคลื่นไซนัสบนกระดาษแผ่นหนึ่งโดยมีแกนที่เรียกว่า x ชี้ไปทางขวาและแกน y ตั้งฉาก ถึงแกน x

y (x) = sin (2πfx)

โดยที่ f คือความถี่ของสัญญาณและ x คือตัวแปรพิเศษ f ที่นี่ไม่ได้วัดด้วย 1 / s อีกต่อไป แต่เป็น 1 / (หน่วยของพื้นที่)

ฟูริเยร์นักคณิตศาสตร์ชาวฝรั่งเศสแสดงให้เห็นว่าคุณสามารถสร้างสัญญาณใด ๆ โดยการเพิ่มสัญญาณไซน์และโคไซน์จำนวนหนึ่งด้วยแอมพลิจูดและความถี่ที่แตกต่างกัน ที่เรียกว่าการวิเคราะห์ฟูริเยร์

การใช้การวิเคราะห์ฟูริเยร์เป็นไปได้ที่จะเขียนฟังก์ชันใด ๆ y (x) เป็นผลรวมของสัญญาณไซน์และโคไซน์ที่มีความถี่แตกต่างกันดังนั้นฟังก์ชัน y (x) สามารถเขียนใหม่ในแง่ของฟังก์ชั่นต่างๆที่เกี่ยวข้องกับความถี่ Y (f) หนึ่งสามารถพูดได้ว่า y (x) = Some_Function (Y (f)) หรือ Y (f) = Reverse_of_Some_Function (y (x))

การแปลงฟูริเยร์เป็นฟังก์ชัน F ที่แปลงสัญญาณจากโดเมน x เป็นโดเมนความถี่

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

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

F เป็นฟังก์ชันอะนาล็อกการแปลงฟูริเยร์แบบไม่ต่อเนื่อง DFT เป็นการประมาณเชิงตัวเลขของ F. การแปลงฟูริเยร์อย่างรวดเร็ว FFT เป็นวิธีการทำ DFT ที่เหมาะสำหรับความเร็ว

ตกลง...

ส่วนที่สอง

ตอนนี้ภาพคอมพิวเตอร์ประกอบด้วยพิกเซลและทุกพิกเซลมีค่าความเข้มสำหรับค่า RGB, แดง, น้ำเงิน, น้ำเงินหรือที่รู้จัก ในภาพระดับสีเทาความเข้มของ R, G, B ของพิกเซลใด ๆ เท่ากัน R = G = B = 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 = 10repetitions / 800px = 0.0125 repetitions / 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 พิกเซล x 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 สำหรับการแปลง 1D คุณมีชุดของถังขยะ แรกคือค่าเฉลี่ยของค่าอินพุตทั้งหมด ที่สองคือปริมาณของสัญญาณความถี่ 1 ที่จะเพิ่ม, ที่สามคือจำนวนของสัญญาณความถี่ที่จะเพิ่ม 2, ฯลฯ

สำหรับการแปลง 2D คุณมีกริดของn x n โดยทั่วไปแล้วซ้ายบนนั้นเป็นค่าเฉลี่ยและเมื่อคุณไปในทิศทางแนวนอนถังแต่ละใบจะมีปริมาณสัญญาณที่จะผสมกับความถี่แนวนอนที่ 1, 2, 4 ฯลฯ และเมื่อคุณไปในทิศทางแนวตั้ง คือปริมาณของสัญญาณที่จะผสมกับความถี่แนวตั้ง 1, 2, 4, ฯลฯ

แน่นอนว่าเป็นเรื่องราวที่สมบูรณ์หากคุณกำลังพูดถึง DCT ในทางตรงกันข้ามถังขยะแต่ละลำสำหรับ FFT มีชิ้นส่วนจริงและจินตภาพ FFT ยังคงอยู่บนพื้นฐานความคิดพื้นฐานเดียวกัน (เรียงลำดับ) ยกเว้นว่าวิธีการแมปความถี่บนถังขยะนั้นแตกต่างกันและคณิตศาสตร์มีความน่าสนใจมากขึ้น :-)

แน่นอนว่าสาเหตุที่พบบ่อยที่สุดในการสร้างการแปลงรูปแบบเหล่านี้คือการก้าวไปอีกขั้นหนึ่งแล้วทิ้งข้อมูลบางส่วนออกไป ตัวอย่างเช่น DCT ใช้ในการบีบอัด JPEG โดยการอ่านค่าในรูปแบบซิกแซกเริ่มจากซ้ายบน (ค่าเฉลี่ย) และเลื่อนไปทางขวาล่างข้อมูลที่สำคัญที่สุด (ข้อมูลเฉลี่ยและข้อมูลความถี่ต่ำ) จะได้รับการบันทึกก่อนตามด้วยข้อมูลความถี่ที่สูงขึ้นอย่างต่อเนื่อง ในบางจุดคุณพูดว่า "นี่ดีพอ" แล้วทิ้งข้อมูลความถี่สูงสุดออกไป สิ่งนี้ทำให้ภาพเรียบโดยการทิ้งรายละเอียดเล็ก ๆ น้อย ๆ แต่ก็ยังให้ภาพที่ถูกต้องโดยประมาณ

และ IIRC, FFTs นั้นบางครั้งก็ใช้สำหรับการตรวจจับขอบซึ่งคุณสามารถทิ้งได้ทั้งหมดยกเว้นส่วนประกอบความถี่สูงเพื่อใช้ในการตรวจจับบริเวณที่มีคอนทราสต์สูงที่ขอบคม

ตราสารแห่งชาติมีบทความที่ดีที่อธิบายเรื่องนี้ด้วยภาพ :-)


0

ลองนึกภาพการสแกนเส้นภาพทีละเส้นด้วยตาแมวและให้ผลลัพธ์กับพล็อตเตอร์ (เครื่องแบนที่ทำคลื่นสีดำบนกระดาษ), ออสซิลโลสโคป (กล่องเหล่านี้ทำให้คลื่นสีเขียวกระพริบบนหน้าจอ) หรือวิเคราะห์สเปกตรัม สร้างรั้วสีเขียวหรือสีหลาย ๆ อัน) หรือเป็นลำโพงคู่ได้ ยิ่งโครงสร้างในภาพยิ่งมีความถี่สูงขึ้น (ระดับเสียงในลำโพง) ของสัญญาณที่แสดง / ได้ยินจะสูงขึ้น ยิ่งมีความคมชัดมากขึ้นในโครงสร้างที่ดียิ่งแอมพลิจูดของชิ้นส่วนความถี่สูงจะสูงขึ้นเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.