01204483 Image Processing — Topic 05, Edge Detection

Laplacian of Gaussian — จากไหนมา ทำไมต้องมี

ไล่เหตุผลทีละขั้น: ทำไมต้อง blur ก่อนหาขอบ → รวม Gaussian (LPF) กับ Laplacian (HPF) เป็น operator เดียวได้อย่างไร → ทำไมไม่ต้องสนทิศทางแบบ Sobel (เฉพาะ 2D) → และสุดท้าย LoG คืออนุพันธ์อันดับ 2 ของ Gaussian โดยตรง — เริ่มดูแบบ 1D ก่อน (เข้าใจง่ายกว่า) แล้วค่อยดู 2D

แสดงแบบ

1

Laplacian (อนุพันธ์อันดับ 2) เป็น High-Pass Filter — ขยาย noise (ความถี่สูง) แรงมาก ถ้าไม่ blur (Low-Pass) ก่อน ผลลัพธ์จะเป็น noise ล้วน ไม่ใช่ขอบจริง

2

Convolution มีสมบัติการรวม (associative): Laplacian(Gaussian * สัญญาณ) = (Laplacian * Gaussian) กับสัญญาณ — รวม kernel สองตัวเป็นตัวเดียวได้ล่วงหน้า ลองเอาเมาส์ชี้บนกราฟ/ภาพในข้อ 2 เพื่อดูค่าจริงของการคำนวณ

3

Laplacian ใน 2D (∇² = ∂²/∂x² + ∂²/∂y²) เป็น operator isotropic ไม่ต้องแยก Gx/Gy แบบ Sobel — ข้อนี้เป็นแนวคิดเฉพาะ 2D เพราะ 1D มีมิติเดียว ไม่มีปัญหาเรื่องทิศทางตั้งแต่ต้น

4

สุดท้าย LoG มีสูตรปิด (closed form) จากการหาอนุพันธ์อันดับ 2 ของฟังก์ชัน Gaussian โดยตรง ไม่ต้องคำนวณ convolution ของ 2 kernel เลยก็ได้

ตั้งค่า operator (ใช้ร่วมกันทุกส่วนด้านล่าง ทั้ง 1D และ 2D)

2.0
18

1–4 · จากสัญญาณ ถึง Laplacian⊛Gaussian (เทียบทั้งหมดพร้อมกัน)

ทุก block ด้านล่างกรองสัญญาณต้นฉบับเส้นเดียวกัน (block 1) ด้วย operator ที่ต่างกัน — เอาเมาส์ชี้บนกราฟผลลัพธ์ของ block 4 เพื่อดูค่าจริงของ operator ที่ตำแหน่งนั้น

1 · สัญญาณตัวอย่าง

N=64, noise ปรับได้ด้านบน

2 · Laplacian (HPF)

ไม่ blur ก่อน — noise ถูกขยายจนกลบขอบจริง

[1, −2, 1]

3 · Gaussian (LPF)

เรียบขึ้นแต่ยังไม่บอกตำแหน่งขอบ (σ ปรับได้ด้านบน)

Gaussian (5 taps)

4 · Laplacian⊛Gaussian

รอบเดียว = blur→derivative ทีละขั้น (associative)

ยาว 7

ชี้เมาส์บนกราฟเพื่อดูค่า operator

5 · ทำไมข้อทิศทางไม่มีใน 1D

Sobel ต้องแยก Gx/Gy เพราะภาพมี 2 มิติ ขอบแนวตั้งกับแนวนอนตอบสนองไม่เหมือนกัน — สัญญาณ 1D มีแกนเดียว ไม่มีทิศทางให้เลือกตั้งแต่ต้น อนุพันธ์อันดับ 2 บนเส้นเดียวจึง "ครบ" อยู่แล้วโดยไม่ต้องพูดถึงทิศทางเลย ประเด็นนี้จะเห็นภาพชัดเมื่อสลับไปดูโหมด 2D (ปุ่มด้านบนสุด) ที่ต้องเทียบกับ Sobel จริง ๆ

6 · LoG = อนุพันธ์อันดับ 2 ของ Gaussian โดยตรง — 1D

สองวิธีสร้าง operator ตัวเดียวกัน: (ซ้าย) convolve Gaussian กับ [1,−2,1] แบบ discrete จากข้อ 4, (ขวา) แทนค่าสูตร G″(x;σ) ตรง ๆ — รูปทรง "Mexican hat" cross-section เหมือนกัน ต่างกันเล็กน้อยเพราะ discrete Laplacian เป็นการประมาณค่าของอนุพันธ์ต่อเนื่อง

จากข้อ 4: Gaussian ⊛ [1,−2,1] (discrete)
สูตรปิด: G″(x;σ) โดยตรง

1 · ทำไมต้อง Blur (LPF) ก่อนหาขอบ (HPF) — 2D

ภาพทดสอบ (มี noise ตามสไลเดอร์)

Laplacian ตรง ๆ (ไม่ blur)

HPF ล้วน — noise ถูกขยายจนกลบขอบจริง

Blur (Gaussian) ก่อน แล้วค่อย Laplacian

LPF ก่อน HPF — เห็นขอบจริงชัดกว่ามาก

2 · รวม Gaussian + Laplacian เป็น Operator เดียว — 2D

เอาเมาส์ชี้บนภาพ "ทำ 1 รอบ" ด้านล่างเพื่อดูค่าจริงของ operator ที่ตำแหน่งนั้น

วิธีที่ 1: ทำ 2 รอบ

blur → laplacian (ทีละขั้น)

วิธีที่ 2: ทำ 1 รอบ (ลองเอาเมาส์ชี้)

convolve ด้วย kernel รวมแล้ว (Gaussian⊛Laplacian)

ผลต่างสูงสุด (เฉพาะพื้นที่กลางภาพ ไม่รวมขอบ)
ผลต่างใกล้ขอบภาพเกิดจากวิธีจัดการขอบเขต (border clamp) ที่ต่างกันระหว่าง 2 รอบ กับ 1 รอบ ไม่ใช่ข้อผิดพลาดทางคณิตศาสตร์

ค่าจริงของ operator ที่ตำแหน่งที่ชี้ (2D, kernel 7×7)

เอาเมาส์ไปชี้บนภาพ "ทำ 1 รอบ" ด้านบน

Gaussian (LPF)
Laplacian (HPF)
= รวมกันเป็น (7×7)

3 · ไม่ต้องสนทิศทาง — เทียบกับ Sobel

ภาพทดสอบมีเส้นหลายแนว (0°–360°) — Sobel ทิศเดียวตรวจจับได้ไม่ครบทุกแนว ต้องรวม Gx+Gy (2 kernel) ถึงจะครบ ส่วน LoG ใช้ kernel เดียวจับได้ทุกแนวพร้อมกัน

ภาพทดสอบ (เส้นหลายทิศ)

Sobel Gx เท่านั้น

พลาดเส้นบางแนว

Sobel Gy เท่านั้น

พลาดเส้นคนละแนวกับ Gx

Sobel Magnitude

ต้องรวม 2 kernel ถึงครบ

LoG (kernel เดียว)

ครบทุกแนวในครั้งเดียว

4 · LoG = อนุพันธ์อันดับ 2 ของ Gaussian โดยตรง (สูตรปิด)

สองวิธีสร้าง operator ตัวเดียวกัน: (ซ้าย) convolve Gaussian กับ Laplacian แบบ discrete จากข้อ 2, (ขวา) แทนค่าสูตร ∇²G(x,y;σ) ตรง ๆ — รูปทรง "Mexican hat" เหมือนกัน ต่างกันเล็กน้อยเพราะ discrete Laplacian เป็นการประมาณค่าของ ∇² ต่อเนื่อง

จากข้อ 2: Gaussian ⊛ Laplacian (discrete)
สูตรปิด: ∇²G(x,y;σ) โดยตรง