Gaussian Blur - ค่าเบี่ยงเบนมาตรฐาน, รัศมีและขนาดเคอร์เนล


19

ฉันใช้งานตัวแยกส่วน Gaussian Blur ใน GLSL ฉันเข้าใจแนวคิดหลักที่อยู่เบื้องหลังทั้งหมด: convolution, การแยก x และ y โดยใช้ linearity, การผ่านหลายครั้งเพื่อเพิ่มรัศมี ...

ฉันยังมีคำถามสองสามข้อที่:

  • ความสัมพันธ์ระหว่างซิกม่าและรัศมีคืออะไร?

    ฉันอ่านแล้วว่าซิกมาเทียบเท่ากับรัศมีฉันไม่เห็นว่าซิกม่าแสดงออกเป็นพิกเซลได้อย่างไร หรือ "รัศมี" เป็นเพียงชื่อของซิกม่าไม่เกี่ยวข้องกับพิกเซล?

  • ฉันจะเลือก sigma ได้อย่างไร

    เมื่อพิจารณาว่าฉันใช้หลายรอบเพื่อเพิ่มซิกม่าฉันจะเลือกซิกม่าที่ดีเพื่อรับซิกม่าที่ฉันต้องการได้อย่างไร หากซิกม่าที่เกิดขึ้นเท่ากับสแควร์รูทของผลรวมของกำลังสองของซิกมาสและซิกมาเท่ากับรัศมีแล้ววิธีง่าย ๆ ในการรับรัศมีที่ต้องการคืออะไร?

  • ขนาดที่เหมาะสมสำหรับเคอร์เนลคืออะไรและเกี่ยวข้องกับซิกม่าอย่างไร

    ฉันเห็นการใช้งานส่วนใหญ่ใช้เคอร์เนล 5x5 นี่อาจเป็นตัวเลือกที่ดีสำหรับการนำไปใช้อย่างรวดเร็วด้วยคุณภาพที่เหมาะสม แต่มีเหตุผลอื่นอีกไหมในการเลือกขนาดเคอร์เนลอื่น sigma เกี่ยวข้องกับขนาดเคอร์เนลอย่างไร ฉันควรหา sigma ที่ดีที่สุดเพื่อให้ค่าสัมประสิทธิ์นอกเคอร์เนลของฉันเล็กน้อยและเป็นปกติ?

คำตอบ:


21

ความสัมพันธ์ระหว่างซิกม่าและรัศมีคืออะไร? ฉันอ่านแล้วว่าซิกมาเทียบเท่ากับรัศมีฉันไม่เห็นว่าซิกม่าแสดงออกเป็นพิกเซลได้อย่างไร หรือ "รัศมี" เป็นเพียงชื่อของซิกม่าไม่เกี่ยวข้องกับพิกเซล?

มีสามสิ่งที่เล่นอยู่ที่นี่ ความแปรปรวน ( ), รัศมีและจำนวนพิกเซล เนื่องจากนี่เป็นฟังก์ชั่นเกาส์ 2 มิติจึงเหมาะสมที่จะพูดถึงเมทริกซ์ความแปรปรวนร่วมแทน อย่างไรก็ตามแนวคิดทั้งสามนั้นมีความสัมพันธ์กันอย่างอ่อนแอ Σσ2Σ

ครั้งแรกของทั้งหมด Gaussian 2-D ถูกกำหนดโดยสมการ:

g(z)=1(2π)2|Σ|อี-12(Z-μ)TΣ-1 (Z-μ)

โดยที่เป็นเวกเตอร์คอลัมน์ที่มีพิกัดและในรูปภาพของคุณ ดังนั้นและเป็นเวกเตอร์คอลัมน์ที่ประมวลความหมายของฟังก์ชัน gaussian ของคุณในทิศทางและ{bmatrix} x y z = [ x y ] μ x y μ = [ μ x μ y ]ZxYZ=[xY]μxYμ=[μxμY]

ตัวอย่าง:

ตอนนี้ให้เราบอกว่าเราตั้งค่าความแปรปรวนร่วมและ{bmatrix} ฉันยังจะกำหนดจำนวนพิกเซลที่จะเป็น x 100นอกจากนี้ 'ตาราง' ของฉันที่ฉันประเมินรูปแบบไฟล์ PDF นี้เป็นไปได้ไปจากไปทั้งในและYซึ่งหมายความว่าฉันมีความละเอียดตารางของ0.2 แต่นี่เป็นสิ่งที่ไม่มีข้อ จำกัด ด้วยการตั้งค่าเหล่านั้นฉันจะได้ภาพฟังก์ชั่นความหนาแน่นของความน่าจะเป็นทางด้านซ้าย ทีนี้ถ้าฉันเปลี่ยน 'ความแปรปรวน' (จริง ๆ แล้วความแปรปรวนร่วม) เช่นนั้นΣ=[1001]μ=[00]100100-1010xY10-(-10)100=0.2Σ=[9009]และทำให้ทุกอย่างเหมือนเดิมฉันได้ภาพที่เหมาะสม

ป้อนคำอธิบายรูปภาพที่นี่

จำนวนพิกเซลยังคงเท่าเดิมสำหรับทั้ง xแต่เราเปลี่ยนความแปรปรวน สมมติว่าเราทำแทนการทดสอบเดียวกัน แต่ใช้ xพิกเซลแทน แต่ฉันยังคงวิ่งจากไป10จากนั้นตารางของฉันมีความละเอียดของ1 ถ้าฉันใช้โควาเรียสแบบเดียวกับก่อนหน้านี้ฉันจะได้รับสิ่งนี้:1001002020-101010-(-10)20=1

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือวิธีที่คุณต้องเข้าใจการทำงานร่วมกันระหว่างตัวแปรเหล่านั้น หากคุณต้องการรหัสฉันสามารถโพสต์ได้ที่นี่เช่นกัน

ฉันจะเลือก sigma ได้อย่างไร

ทางเลือกของความแปรปรวน / ความแปรปรวนร่วมเมทริกซ์ของตัวกรอง Gaussian ของคุณขึ้นอยู่กับการใช้งานอย่างมาก ไม่มีคำตอบ 'ถูก' นั่นก็เหมือนกับการถามว่าควรเลือกแบนด์วิดธ์ใดสำหรับตัวกรอง อีกครั้งมันขึ้นอยู่กับใบสมัครของคุณ โดยทั่วไปแล้วคุณต้องการเลือกตัวกรองแบบเกาส์เซียนเพื่อให้คุณลบส่วนประกอบความถี่สูงจำนวนมากในภาพของคุณ สิ่งหนึ่งที่คุณสามารถทำได้เพื่อวัดผลได้ดีคือการคำนวณ 2D DFT ของภาพและซ้อนทับค่า co-efficients ด้วยภาพ 2D gaussian ของคุณ สิ่งนี้จะบอกคุณว่ามีการลงโทษอย่างมีส่วนร่วมอย่างมาก

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


1
ภาพเหล่านั้นน่าจะดีกว่าหากใช้ colormap ตามลำดับ เจ็ทนั้นแย่ที่สุด
endolith

@endolith "Better" ขึ้นอยู่กับแอปพลิเคชัน ฉันไม่ได้ใช้เจ็ทเมื่อจำเป็นต้องมีการเลือกปฏิบัติทางตรงกันข้ามของภาพ (ร้อนแรงดีกว่า) ที่นี่แม้ว่าข้อความจะมีขนาดเท่ากับ Gaussian ดังนั้นจึงไม่มีอันตรายใด ๆ เกิดขึ้นกับเจ็ท ขอบคุณสำหรับลิงค์แม้ว่า
Tarin Ziyaee

2
นี่เป็นคำตอบที่คิดออกมาได้ดีและมองเห็นได้ดีจริงๆ! ยกตัวอย่างเช่นภาพบนซ้าย เป็นที่ชัดเจนว่าการรวมกันของความแปรปรวนและขนาดเคอร์เนลจะสิ้นเปลืองเนื่องจากเป็นเคอร์เนล 100x100 ที่เฉพาะจุดศูนย์กลาง 30x30 (~ 9%) ไม่ใช่ศูนย์
Adam Smith

5

พารามิเตอร์ sigma เพียงพอที่จะกำหนด Gaussian เบลอจากมุมมองต่อเนื่อง อย่างไรก็ตามในทางปฏิบัติรูปภาพและเมล็ดข้าวเหนียวนั้นไม่ต่อเนื่อง วิธีการเลือกการประมาณแบบไม่ต่อเนื่องที่เหมาะสมของเคอร์เนลเสียนต่อเนื่อง

การประมาณแบบไม่ต่อเนื่องจะใกล้เคียงกับเคอร์เนลเสียนต่อเนื่องเมื่อใช้รัศมีที่มีขนาดใหญ่กว่า แต่สิ่งนี้อาจมีค่าใช้จ่ายในการเพิ่มระยะเวลาการคำนวณ

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

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

ในการอ้างอิงใน Mathematica ฟังก์ชั่นGaussianMatrixมีคุณสมบัติหลายวิธีในการคำนวณเมทริกซ์ไม่ต่อเนื่องแบบเกาส์เช่นการใช้ Bessel โดยสิ้นเชิงประมาณ โดยค่าเริ่มต้นรัศมี = 2 * sigma ซึ่งหมายความว่าด้วย sigma = 1 เมทริกซ์จะเป็น 5x5


นี่เป็นคำถามที่ค่อนข้างเก่า แต่รัศมีของ 2 * sigma จะส่งผลให้เมทริกซ์นั่นคือ 9x9 หรือไม่?
Delusional Logic

@DelusionalLogic พร้อม sigma = 1, รัศมี = 2 ดังนั้นเมทริกซ์จะมีขนาด 4 แต่ต้องการขนาดแปลกดังนั้นขนาด 5x5 อย่างน้อยนั่นก็เป็นวิธีที่ฉันเข้าใจ ..
มิ

หากรัศมีเป็น 2 ละแวกใกล้เคียงขยายพิกเซลกลางโดย 2 พิกเซลไปทางซ้าย 2 ไปทางขวา ฯลฯ เป็นเพียงการประชุมที่ Mathematica ใช้
Matthias Odisio

2

แต่กลับกลายเป็นว่าแถวของสามเหลี่ยมปาสคาลใกล้เคียงกับเกาส์เซียนอย่างมากและมีข้อได้เปรียบในทางปฏิบัติของการมีค่าจำนวนเต็มมีผลรวมเป็นอำนาจของ 2 (เราสามารถเก็บค่าเหล่านี้ว่าเป็นจำนวนเต็มค่าจุดคงที่หรือลอยตัว) ตัวอย่างเช่นสมมติว่าเราต้องการสร้างเคอร์เนล Gaussian ขนาด 7x7 เราสามารถทำได้โดยใช้แถวที่ 7 ของสามเหลี่ยม Pascal ดังต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

โปรดทราบว่าตัวกรองนี้มีอิทธิพลขั้นต่ำที่มุมในขณะที่จำนวนเต็มที่เหลืออยู่มูลค่า คุณสามารถใช้ค่ากลาง 20/64 เพื่อกำหนดซิกม่าค่าเบี่ยงเบนมาตรฐานที่สอดคล้องกันซึ่งคือ 64 / (20 * sqrt (2 * pi)) = 1.276 สำหรับ Gaussian โดยประมาณในกรณีนี้ คุณสามารถวาดกราฟเกาส์เพื่อดูว่านี่เป็นขนาดที่พอดี

จุดเริ่มต้นที่ดีสำหรับการพิจารณาค่าเบี่ยงเบนมาตรฐานที่เหมาะสมสำหรับเคอร์เนลเกาส์เซียนมาจากสามเหลี่ยมปาสคาล (aka Binomial Coefficients ) - สำหรับตัวกรอง (N + 1) x (N + 1) ที่สอดคล้องกับการใช้งานก่อสร้างข้างต้น

ป้อนคำอธิบายรูปภาพที่นี่

GaussianMatrixของ Wolfram Alpha [3]เพิ่งใช้ r / 2 = 1.5 น่าประหลาดใจที่ GaussianMatrix [{3,1.276}] ไม่ได้ให้ผลการกรอง 2D แบบเดียวกับฉันและไม่ใช่ x, y ระหว่าง -3 และ 3:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันไม่แน่ใจว่าทำไม ตัวกรอง 2D ของฉันเหมาะสมอย่างยิ่ง

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