יום שני, 31 באוגוסט 2009

Seam Carving, מדריך לשינוי גודל תמונה ללא איבוד פרופורציות, בחינם, בוידאו ובסטילס!

קצת רקע:

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

הבעיה נהפכה ליותר נפוצה עם הכניסה של המסכים הרחבים, בפרט מסכי HD (ביחס 16:9) בזמן ששידורי הטלוויזיה בארץ נשארו ביחס של 4:3.
עד לא מזמן היו מס' פתרונות, אך הם לא אידיאליים. היה ניתן לבצע חיתוך, מתיחה, שילוב של השניים, ובמקרה הכי טוב מתיחה לא ליניארית (מרכז התמונה נשאר כמעט ללא עיוות והקצוות נמתחו בצורה קיצונית יותר).

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

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

אבל, מאז פריצת הדרך, לא שמענו מאדובי, אשר לקחה את המפתחים תחת חסותם, דבר וחצי דבר על שילוב הטכניקה בתוכנות שלה, כדוגמת פוטושופ, עד שהגיע Adobe Photoshop CS4 Extended, שם הטכניקה נקראת Content-Aware Scaling.
כהרגלי, אני לא אמליץ לכם על תוכנות קנייניות, כי מה שיקרה זה אחד מהשניים: לא כולם ירוצו לקנות את הגירסה המורחבת והכי חדשה של פוטושופ, שבארץ עולה 4740 שקלים, את זה יעשו רק גרפיקאים ואנשי מקצוע. האופציה היותר סבירה, היא שיורידו גירסה פיראטית בעלת הכי הרבה עותקים פיראטיים בעולם (אחרי Windows).

תאמינו או לא, עוד לפני שיצאה הגרסה החדשה, ניתן היה למצוא את האלגוריתם הזה בתוכנות חינמיות. ועכשיו ניתן גם בתוכנת GIMP החינמית (לעיבוד סטילס) וגם בAviSynth (לעיבוד וידאו) בה השתמשנו במדריך הקודם להילוך איטי (בשתיהן בתצורה של Plug-in חיצוני).

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

המדריך לתמונות סטילס:
GIMP היא תוכנה לעיבוד תמונה חינמית בקוד פתוח, יש הרבה דמיון בינה לבין פוטושופ, תמיכה בשכבות ועוד, לדעתי היא התחליף הזול מאוד לפוטושופ.
הורדה כאן.
עליכם להתקין גם את הפלאג, Liquid Rescale מכאן.

לאחר ההתקנה היכנסו לתוכנה, פתחו קובץ תמונה דרך File Open. לכו ללשונית Layers ואז Liguid Rescale.
בחרו גודל חדש לתמונה, בפיקסלים. לא להתפרע, לכל תוכנה יש מגבלות, אבל זה עובד מצויין לשינוי יחסי מסך מאחד לשני כגון: 3:2, 4:3, 16:9, 16:10 ואף 2.35:1.

יש הרבה פרמטרים אך לרוב לא צריך לשנות אותם, אלא אם כן אתם רוצים להעלים עצמים לא רצויים מהתמונה, על כך בהמשך.

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

דוגמה חשובה:
נניח שיש לכם תמונה בת 12 מגה-פיקסל (4000x3000) שצולמה ביחס 4:3, ואתם רוצים להפוך אותה לHD Ready (1280x720 ביחס 16:9.
קודם עליכם להתאים את היחס גובה-רוחבבאמצעות הפלאג Liquid Rescale. את הגובה מקטינים, ברוחב לא נוגעים.
החישוב הוא כזה: 4000 חלקי 16 כפול 9. כך מגיעים לגובה הנדרש שיוצא 2250. כלומר, יש לנו עכשיו תמונה בגודל 4000x2250 ביחס 16:9.
רק עכשיו ניתן לשנות את הגודל הכללי, ע"י Resize פשוט, להקטין ל1280x720.


המדריך למרטש המתחיל:

כן כן, כולכם יכולים להיות מרטשים מוצלחים, בעזרת הכלי החדש.
תמיד רציתם להעלים עצמים מזיקים מהתמונה אך להשאיר את מה שחשוב והסתבכתם שעות בפוטושופ, כן זה קרה לכולם. הרבה תמונות התקלקלו בגלל איזה מעפן אחד שהחליט לעשות לכם קרניים מאחורי הראש ולהרוס את התמונה הכי יפה שלכם עם החבר'ה. עכשיו ניתן לתקן, ובקלי קלות, רק תמרקרו מה אתם רוצים להשאיר ומה למחוק.
אני מקווה שלא סגרתם עדיין את החלון של GIMP, תטענו את התמונה האהובה שלכם ותלכו שוב ל Liguid Rescale שנמצא בלשונית Layers.
עכשיו נשחק קצת עם ההגדרות:
תסמנו V על Preserve features ואז לחצו על New.
תגררו את החלון עם ההגדרות הצידה, נוצרה לנו שכבה חדשה אבל היא לא אמורה להטריד אתכם.
תעברו עם העכבר על האזורים שאתם רוצים שלא יפגעו, אתם יכולים לבחור מברשת גדולה יותר בצד ימין, האזורים שנבחרו יצבעו במרקר ירוק. הערה: שלב זה אינו חובה אך מומלץ.
תסמנו V על Discard features ושוב על New.
תעברו על החלקים אתם רוצים שימחקו מהתמונה, הם יצבעו במרקר אדום.
תעלו את ערך הStrength ל3000, אנחנו רוצים שלא ישאר זכר מהקרניים או מהאצבע המשולשת הסוררת.
יש שלוש אפשרויות: אתם יכולים לבחור בMode את LqR + Scale Back (פחות מומלץ).
להישאר בLqR Only ולהקטין את הערכים משמאל
להישאר בLqR Only ולתת לתוכנה לעשות זאת עבורכם: לחצו AutoSize, שנו את Vertical אל Horizontal ולחצו שוב AutoSize.
לחצו OK והמתינו לסיום החישוב
תורידו את העין מהשכבות של המרקרים (צד ימין) ותשמרו.
התוצאות לפניכם:




מדריך לעיבוד וידאו:

AviSynth היא תוכנה לעיבוד וידאו הפועלת באמצעות סקריפטים (קוד המכיל פקודות). במדריך הקודם השתמשנו באותה תוכנה רק שאז היא הייתה מובנית בתוכנת הקידוד האהובה והחינמית MeGUI.
הורדה כאן
הורדת הפלאג בשם Seamer מכאן.
חלצו את הפלאג לתיקיה כלשהי, מכאן השלבים מאוד דומים למדריך הקודם להילוך איטי:
Tools ואז AVS Script Creator, עוברים ללשונית Edit
יש לטעון את הפלאג, לחצו Load Dll
הפקודה היא זו
trseamer(x = 384,y = 288)
בחרו את הגודל החדש בפיקסלים, עדיף להקטין מאשר להגדיל, ניתן להקטין עד לחצי מהגודל המקורי.
הקוד הסופי צריך להראות כך:

LoadPlugin("$YourFolder\Seamer.dll")
AVISource("YourVideo.avi")
converttorgb()
trseamer(x = 384,y = 288)
#deinterlace and blablabla
לחצו Save והמשיכו לשלב הקידוד.
אם אתם רוצים לקודד עם תוכנה אחרת, סגרו את התוכנה הזאת ותטענו לתוכנה המועדפת עליכם את קובץ הavs שנוצר בתיקיה בה נמצא הוידאו שלכם.

שנה טובה ובהצלחה!

3 תגובות:

  1. נסיתי לשנות את הרזולוציה של התמונה שלי מ 10 מגה פיקסל ביחס 4:3 לרזלוציה 720p אבל ללא הצלחה.
    עשיתי בדיוק את הדרך שאמרת ב gimp כולל הפלאג-אין אבל לאחר שהתמונה נטנעת, מתקבלת תמונה מכווצת בתוכה, כלומר הכל התעוות בתמונה והתכווץ.
    איפה הבעיה?

    אשמח לתשובה
    אלעד

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

    השבמחק
  3. הורדתי את הפלאגין אבל לא הצלחתי לפתוח אותו.
    מישהו נתקל בבעיה?

    השבמחק