JPEG

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
תמונת פרח בפורמט JPEG; איכות התמונה משתנה מימין לשמאל בגלל רמת דחיסה שונה בין הצדדים.

JPEG (נהגה "ג'יי-פג", ), ראשי תיבות של Joint Photographic Experts Group, הוא פורמט דחיסה גרפי בקובצי מחשב לדחיסת תמונות שפותח בסוף שנות השמונים וקרוי על שם הקבוצה שתקננה את הפורמט. נחשב לאחד הפורמטים הנפוצים והיעילים לדחיסת תמונות טבעיות ביחס של נפח לשימור מידע. מכיל אלגוריתמים של דחיסה מאבדת נתונים, לצד דחיסה שאיננה מאבדת נתונים. סיומת הקובץ היא jpg או jpeg.

מבוא[עריכת קוד מקור | עריכה]

אף שהתקן של JPEG כולל למעשה ארבעה אלגוריתמים שונים, נהוג להתייחס בעיקר לאלגוריתם המרכזי שלו שמתבסס על דחיסת התמרה. אף שדחיסה זו מאפשרת להגיע ליחס דחיסה של עד 1 ל־100, רק בדחיסה של עד 1 ל־30 ניתן להבחין בפרטים המקוריים באופן סביר (יחסי הדחיסה לעיל מתייחסים רק לחלק המאבד נתונים, יחס הדחיסה הסופי עשוי להיות שונה). בניגוד לדחיסת ZIP, דחיסה זו הנה דחיסה מאבדת נתונים, כלומר היא גורמת לעיוות מסוים של התמונה. לרוב, ככל שרמת הדחיסה גבוהה יותר כך יאבדו יותר פרטים מהתמונה המקורית (איבוד זה תלוי במאפיינים המדויקים של התמונה).

דחיסת ההתמרה יעילה במיוחד לתמונות טבעיות בעלות משטחים לא אחידים, כמו תמונות נוף ואנשים. לעומת זאת עבור תמונות בעלות משטחים אחידים המכילות מעברים חדים, כמו טקסטים ושרטוטים גאומטריים, דחיסה זו גורמת לעיוותים רבים יחסית, ויש לפורמטי דחיסה אחרים כמו GIF ו־PNG יתרון ברור עליה, הן בנפח הקובץ והן בנאמנות למקור.

ארבעת הקידודים של התקן[עריכת קוד מקור | עריכה]

תרשים המראה את האיכות היחסית של גרסאות הגדרות קידוד של JPEG. סוגי דחיסת שמירת קובץ בפורמט ושימוש באופציית תכנת פוטושופ - "שמירה ל-WEB".

למעשה התקן של פורמט זה מכיל ארבעה קידודים שונים למטרות שונות ואלו הם:

  • קידוד הבסיס מתייחס לאלגוריתמים המרכזיים של התקן. בקידוד דחיסת ההתמרה היעילה לתמונות טבעיות, ערכי הפיקסלים מומרים לערכי התדרים שלהם, ונעשה קיצוץ בתחום התדרים הגבוה של התמונה, ביחס אליו העין האנושית רגישה פחות, בדומה לשיטה של קידוד MP3 בקובצי קול, בה מקוצצים תדרים שרגישותה של האוזן האנושית אליהם נמוכה, כך שהקיצוץ כמעט ואיננו מורגש.
  • קידוד חסר ההפסדים של הדחיסה המשערכת, המיועד ליישומים בהם אין לאפשר איבוד מידע כמו ארכיבאות רפואית. התקן של ה-JPEG כולל גם אלגוריתם של דחיסת משערכת שהינה דחיסה משמרת נתונים, המייצגת את התמונה לא לפי הפיקסלים עצמם, אלא לפי ההפרשים שביניהם. בדחיסה זו המנצלת את העובדה שברוב התמונות קיים מתאם מרחבי גבוה בין נקודות סמוכות, יחס הדחיסה נמוך (בדרך כלל בסביבות 1 ל־2), ואינו מתחרה בפורמטים כמו GIF ו־PNG.
  • קידוד מתחדד (סירוג) להצגת תמונות שמשודרות בקצב שידור נמוך, באופן שמקבלים תמונה ראשונית שהולכת ומתחדדת כבר בשלב הראשון של השידור.
  • קידוד מדרגי שבו אפשר לשמור את התמונה ברזולוציות שונות הנמוכות מהרזולוציה המקורית, וכך ניתן לקבלת תצוגה מקדימה של התמונה ללא פתיחתה המלאה.

קידוד דחיסת התמרה[עריכת קוד מקור | עריכה]

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

שלבי הדחיסה של שיטה זו הן:

  • התמרת מרחב הצבע
בתמונות צבע מרחב הצבע מומר בשלב ראשון ממרחב RGB למרחב YCbCr. במרחב זה מתבצע שימוש בשידורי טלוויזיה. ערך ה-Y מייצג את עוצמת הפיקסל ורכיבי ה-Cr (ההפרש בין הצבע האדום, R, לעוצמה Y) וה-Cb (ההפרש בין הצבע הכחול, B, לעוצמה Y) מייצגים ביחד את הצבע של הפיקסל (בשיטת YCbCr משתמשים גם ב-Cg, אך ניתן לחשב אותו מהערכים המוזכרים קודם, כך שהוא מחושב במקלט). שיטה זו מנצלת את העובדה שלעין האנושית יכולת טובה יותר להבחין בפרטים ברכיב ה-Y מאשר ברכיבי הצבע.
  • צמצום הדגימה
בשלב זה מנצלים את חוסר הרגישות היחסית של העין האנושית להבחין בפרטים במרחב הצבע ומקטינים את צפיפות הדגימה של רכיבי ה-Cr וה-Cb בלבד. יש שלוש אפשריות לפעולה זו: בשיטת 4:4:4 מדלגים על שינוי הדגימה, בשיטת 4:2:2 מצמצמים את הדגימה ביחס 1:2 בכיוון האופקי ובשיטת 4:2:0 הנפוצה, מצמצמים את הדגימה ביחס 1:2 בממד האנכי והאופקי. מכאן ואילך שלושת הרכיבים מעובדים באופן דומה ובמקביל.
  • חלוקה לתת תמונות.
חלוקה של התמונה המקורית לתת תמונות (8X8 פיקסלים לכל תת-תמונה). ככל שתת-התמונות גדולות יותר יחס הדחיסה גדול יותר, אך גם המורכבות החישובית עולה, ולכן החלוקה הקיימת בדחיסת JPEG לתת תמונות בגודל 64 פיקסלים, היא פשרה בין שני מרכיבים אלו.
לדוגמה אם ערכי תת-התמונה המקורית הם אלו:

\begin{bmatrix}
 52 & 55 & 61 & 66 & 70 & 61 & 64 & 73 \\
 63 & 59 & 55 & 90 & 109 & 85 & 69 & 72 \\
 62 & 59 & 68 & 113 & 144 & 104 & 66 & 73 \\
 63 & 58 & 71 & 122 & 154 & 106 & 70 & 69 \\
 67 & 61 & 68 & 104 & 126 & 88 & 68 & 70 \\
 79 & 65 & 60 & 70 & 77 & 68 & 58 & 75 \\
 85 & 71 & 64 & 59 & 55 & 61 & 65 & 83 \\
 87 & 79 & 69 & 68 & 65 & 76 & 78 & 94
\end{bmatrix}
  • הזחת ערכי פיקסלים.
תת תמונה בגווני אפור
הזחה של רמות הפיקסלים באמצעות חיסור 128 מערכו המתמטי של כל פיקסל. במקרה הכללי, מתבצעת הזחה מתאימה כך שערכי הפיקסלים יהיו סביב הערך המרכזי 0.
לאחר הזחה של התמונה, התוצאה של מטריצת תת-התמונה תהיה:

\begin{bmatrix}
 -76 & -73 & -67 & -62 & -58 & -67 & -64 & -55 \\
 -65 & -69 & -73 & -38 & -19 & -43 & -59 & -56 \\
 -66 & -69 & -60 & -15 & 16 & -24 & -62 & -55 \\
 -65 & -70 & -57 & -6 & 26 & -22 & -58 & -59 \\
 -61 & -67 & -60 & -24 & -2 & -40 & -60 & -58 \\
 -49 & -63 & -68 & -58 & -51 & -60 & -70 & -53 \\
 -43 & -57 & -64 & -69 & -73 & -67 & -63 & -45 \\
 -41 & -49 & -59 & -60 & -63 & -52 & -50 & -34
\end{bmatrix}
  • התמרת תדרים (Discrete Cosine Transform).
התמרת תת-התמונות לתחום התדרים שלהם באמצעות התמרת DCT שהיא התמרת קוסינוס דיסקרטית, הממזגת בין יכולת דחיסה לסיבוכיות חישובית, ולכן אף שאיננה ההתמרה האופטימלית, שגיאת הפריסה שלה נמוכה מהתמרות אחרות כדוגמת התמרת פוריה. עקרונית עצם פעולת ההתמרה איננה כרוכה באיבוד מידע.
ולאחר התמרת התדרים ועיגולם מטריצת DCT של תת-התמונה (תסומן C) תהיה:

\begin{bmatrix}
 -415 & -30 & -61 & 27 & 56 & -20 & -2 & 0 \\
 4 & -22 & -61 & 10 & 13 & -7 & -9 & 5 \\
 -47 & 7 & 77 & -25 & -29 & 10 & 5 & -6 \\
 -49 & 12 & 34 & -15 & -10 & 6 & 2 & 2 \\
 12 & -7 & -13 & -4 & -2 & 2 & -3 & 3 \\
 -8 & 3 & 2 & -6 & -2 & 1 & 4 & 2 \\
 -1 & 0 & 0 & -2 & -1 & -3 & 4 & -1 \\
 0 & 0 & -1 & -4 & -1 & 0 & 1 & 2
\end{bmatrix}
  • כימוי וקיצוץ.
כימוי של התמונות וקיצוץ מקדמי התדרים הגבוהים (מקדמים אלה נמצאים בצד הימני התחתון של המטריצה. מקדמי התדרים הנמוכים - בצד השמאלי העליון). דבר זה יעיל בגלל רגישות נמוכה של העין לשינויים מהירים, האופייניים לתדרים גבוהים. בשלב זה מתרחש למעשה איבוד המידע.
מטריצת ערכי הכימוי Q:

\begin{bmatrix}
 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\
 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\
 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\
 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\
 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\
 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\
 49 & 64 & 78 & 87 & 103 & 121 & 120 & 101 \\
 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99
\end{bmatrix}
זוהי מטריצה המורכבת מפרמטרי הכימוי Q_{ij} (אינם מוגדרים במפורש בתקן JPEG). שימוש במטריצה זו עם המטריצה C (מטריצת מקדמי ה-DCT של תת-התמונה), ייתן את התוצאות הבאות:

\begin{bmatrix}
 -26 & -3 & -6 & 2 & 2 & -1 & 0 & 0 \\
 0 & -2 & -4 & 1 & 1 & 0 & 0 & 0 \\
 -3 & 1 & 5 & -1 & -1 & 0 & 0 & 0 \\
 -4 & 1 & 2 & -1 & 0 & 0 & 0 & 0 \\
 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\
 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0
\end{bmatrix}
לדוגמה, חישוב הפיקסל הראשון יתבצע על ידי שימוש ב−415- (מקדם ה-DC) ועיגולו למספר השלם הקרוב נעשה באופן הבא:

\mathrm{round}
\left(
 \frac{-415}{16}
\right)
=
\mathrm{round}
\left(
 -25.9375
\right)
=
-26

ובאופן כללי מטריצת המקדמים לאחר כימות, C_q מורכבת מהאיברים:


\C_{q_{ij}}
=
\mathrm{round}
\left(
 \frac{C_{ij}}{Q_{ij}}
\right)
  • קידוד משמר.
קידוד של התוצאה באמצעות קידוד הופמן, שהינו אלגוריתם לקידוד סטטיסטי ולייצוג חסכוני של רמת הבהירות לפי מידת השכיחות. יעיל כאשר יש התפלגות ברורה בין השכיחויות של רמת הבהירות. בקידוד זה הערכים השכיחים ביותר מיוצגים על ידי מספר סיביות מועט ואילו הערכים הנדירים מיוצגים על ידי מספר גדול יותר של סיביות. תקן JPEG מאפשר גם קידוד אריתמטי, אך קידוד זה מוגן על ידי פטנטים והינו מורכב מבחינה חישובית.

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

שימושים[עריכת קוד מקור | עריכה]

ב־JPEG נעשה שימוש רב באינטרנט, במצלמות דיגיטליות, מכשירי DVD ובתוכנות רבות כולל תוכניות גרפיות שונות. בין הדברים שהפכו שיטה זו לפופולרית, היא התמיכה המובנת של חברת מיקרוסופט לפורמט זה במסגרת מערכת ההפעלה שלה. בסביבות פיתוח ושפות תכנות כמו סביבת הדוט נט ושפת התכנות PHP ישנן פונקציות מובנות התומכות בפורמט זה לצד כמה פורמטים נוספים.

לפורמט JPEG ישנה גרסה חדשה יותר ששמה JPEG 2000 (סיומת JP2), אך חלק מהתוכנות הגרפיות והדפדפנים לא תומכים בה ובחלק מופצים תוספים לקידוד בתשלום נוסף על ידי חברות צד שלישי. במחצית שנת 2006 הכריזה חברת מיקרוסופט על פורמט מתחרה לפורמט JPEG בשם Windows Media Photo (סיומת WMP), שאמור להיות יעיל יותר מפורמטי ה-JPEG, בשימור המידע וביחס הדחיסה. פורמט זה הנו קנייני ואמור לקבל רישוי להרצה רק בסביבת חלונות.

ישנה שיטה לדחיסת וידאו בשם M-JPEG המסתמכת על האלגוריתם של דחיסה זו, ולמעשה שומרת תמונות רבות של פורמט זה בקובץ אחד, ללא חישוב ההפרשים בין פריים לפריים כמקובל בדחיסת וידאו.

מגבלות[עריכת קוד מקור | עריכה]

בין המגבלות של פורמט זה ניתן לציין שאינו תומך לא בשקיפות ולא בהנפשה. בקובץ אחד ניתן לשמור רק תמונה אחת בלבד. מגבלה נוספת היא חוסר היעילות של דחיסת תמונות בעלות מעברים חדים, כמו טקסטים וקווים המצויות בתמונות מסך ומסמכים סרוקים. יחד עם זאת, קיימת גרסת M-JPEG המאפשרת דחיסה של סרטונים על ידי דחיסה של כל פריים בסרטון. הדחיסה המושגת בשיטה זו אינה גבוהה, בהשוואה לדחיסות כמו MPEG-2, המשתמשות באלגוריתמים לחיזוי התנועה בין פריימים, אך היא פשוטה למדי מבחינה חישובית.

פטנט[עריכת קוד מקור | עריכה]

נכון להיום הפורמט אינו מוגן על ידי פטנט. חברת Forgent Networks החזיקה בפטנט על פורמט זה, והגישה תביעות משפטיות כנגד למעלה משלושים חברות שונות בשנת 2004, ואף הרוויחה תמלוגים של מיליוני דולרים על הרשאת שימוש בקידוד. אולם לאחר שעמותת PubPat הגישה למשרד הפטנטים האמריקני התנגדות לפטנט בסוף 2005 בטענה לפרסום קודם לרישום הפטנט בידי החברה, התבטל הפטנט לאחר בחינה מחודשת.

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]