4.20. סיכום

עברתם על החלקים של מערך הדימות של המצלמה שעולים בכל פעם שסקריפט לוכד פריים:

  • האופטיקה שלפני החיישן – חור סיכה כרכיב יוצר התמונה הפשוט ביותר, ואז עדשות, שאוספות הרבה יותר אור תוך שהן עדיין ממקדות, כאשר אורך מוקד, צמצם, עומק שדה, ושדה ראייה הם הכפתורים שמהם היישום בוחר. עדשות אמיתיות מגיעות עם עיוות, וינייטינג, ואפקטים של זווית הקרן הראשית שהחיישן וה-ISP מפצים עליהם בהמשך.

  • רשת החיישן – מערך דו-ממדי של פוטו-דיודות שהופך פוטונים למטען, כאשר זמן החשיפה וההגבר (gain) האנלוגי מאזנים בין בהירות לבין טשטוש תנועה ורעש. תריס מתגלגל ותריס גלובלי קובעים כיצד שורות המערך נקראות, וסט קטן של כיולים על השבב – FPN של עמודות, רמת שחור, פיקסל פגום, הצללת עדשה – מנקה את הנתונים לפני שהם עוזבים את השבב. שני אפיקים מחברים את השבב ל-MCU: אפיק בקרה איטי I2C לאוגרים ואפיק מקבילי או MIPI מהיר לפיקסלים.

  • צבע וה-ISP – מערך מסנני צבע מסוג Bayer נותן לכל פיקסל אחד מבין אדום, ירוק, או כחול; debayering מבצע אינטרפולציה של שני הערוצים החסרים. מעבד אות התמונה תופר יחד את שאר הצינור – חילוץ סטטיסטיקה, איזון לבן אוטומטי, debayering, תיקון מטריצת צבע, גמא, שינוי קנה מידה, חיתוך, ואריזה סופית לפורמט הפיקסל המבוקש.

  • פורמטי פיקסל – Bayer גולמי, RGB888, RGB565, YUV422, גווני אפור, BINARY, ופלטי ה-JPEG / PNG הדחוסים מאזנים בין גודל הזיכרון לבין נאמנות הצבע ותאימות לאלגוריתמים בהמשך. RGB565 הוא ברירת המחדל לצבע מוגמר מכיוון שהוא מתיישר עם רוחב המילה של ה-MCU וחוצה את עלות הזיכרון ביחס ל-RGB888.

  • ה-CSI API – חמש שורות הגדרה בתוספת לולאת snapshot הן הצורה שממנה כל סקריפט מתחיל. מאגרי חוצץ פריימים (frame buffer) (יחיד, כפול, משולש, video FIFO, או מופעל בטריגר) מחליטים כיצד היישום והמצלמה חולקים פריימים; ערוץ תצוגה מקדימה נפרד מזין כל תוכנית ניפוי שגיאות שמחוברת מבלי להתחרות על החוצצים של היישום; כפתורי החיישן מכסים כיוון, חשיפה, הגבר (gain), איזון לבן, תקרת קצב פריימים, ותבנית בדיקה של פסי צבע.

  • חיישנים מרובים ומאגרי זיכרון – לוחות עם שני חיישנים יוצרים מופע אחד של CSI לכל שבב ומריצים כל אחד בקצב משלו. מתחת לפני השטח, מאגר חוצץ הפריימים (frame buffer), אזור התצוגה המקדימה, ערימת ה-MicroPython, והקצאות הזיכרון המהיר הקטנות יותר חיים באזורים נפרדים של ה-RAM, ממוקמים כך שהחלקים שזקוקים למהירות מקבלים אותה והחלקים שזקוקים רק לגודל מקבלים זאת במקום.

זה מספיק כדי להוציא פריים מהחיישן עם הפורמט, גודל הפריים, והחשיפה הנכונים לסצנה; לבחור מצב חוצץ פריימים (frame buffer) שמתאים לזמן העיבוד של היישום; לחשוף תצוגה מקדימה חיה לכל מה שמחובר; ולקרוא את Image בחזרה לתוך Python מוכן לפעולה עליו.

4.20.1. שימוש בהפניה זו בהמשך

התייחסו לפרקי הדימות כחומר עיוני, לא כקריאה חד-פעמית. חזרה לרענון בנושא מצבי חוצץ פריימים (frame buffer), פורמטי פיקסל, או משמעותו של כפתור חיישן נתון היא השימוש המכוון. דף ההפניה csi.CSI מפרט כל מתודה במקום אחד כאשר השאלה היא פשוט ”מה השם המדויק של הקריאה הזו שוב“.

4.20.2. לאן ללכת מכאן

עיבוד תמונה הוא הנושא הבא הטבעי. כשהחוצץ בידיים וה-API של csi מובן, מה שנותר הוא מה לעשות עם הפיקסלים: ספים, זיהוי קצוות, מציאת רכיבים/כתמים (blob), זיהוי קווים וצורות, QR codes, AprilTags, הסקה בלמידת מכונה. ערכת הכלים עוברת אל מודול image ואל קטלוג המתודות שלו על אובייקט Image. כל מה שבחלק זה ממשיך הלאה; צורת הלולאה, מצב חוצץ הפריימים (frame buffer), פורמט הפיקסל – כל זה הוא מה שעליו פועלות מתודות עיבוד התמונה.