יותר

גזירת תמונת טיף באמצעות תמונת טיף אחרת באמצעות פייתון

גזירת תמונת טיף באמצעות תמונת טיף אחרת באמצעות פייתון


אני עובד על קוד לקליפ רסטר עם רסטר אחר. יש לי תמונת forestcover.tiff ואני רוצה לצלם אותה באמצעות clip.tiff תמונה אחר המרחיב את השוכב בתוכה. אני לא רוצה להשתמש במודול arcpy כי זה דורש התקנת ArcGIS. הקוד שלי אמור לעבוד עבור כל המשתמשים.


אתה יכול להשתמש ב-תת-תהליךמודול עם כלי שורת הפקודה GDAL כדי לפתור זאת.

ייבוא ​​תת-תהליך קבצי קלט forestcover = "/data/forestcover.tif" clip = "/data/clip.tif" # output files cutline = "/data/cutline.shp" result = "/data/result.tif" #create מצולע הקו החתוך cutline_cmd = ["gdaltindex", קו קו, קליפ] subprocess.check_call (cutline_cmd) # יער לכסות לקו קו הערה: השאירו את האפשרות -crop_to_cutline כדי לצלם על ידי תיבת הגבלה רגילה warp_cmd = ["gdalwarp", "- of "," GTiff "," -cutline ", cutline," -crop_to_cutline ", covercover, result] subprocess.check_call (warp_cmd)

חישוב NDVI מתמונות Landsat8 עם Python 3 ו- Rasterio - הדרכה

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

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

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

מדריך זה מציג את ההליך השלם לניתוח ה- NDVI מתמונת Landsat 8 עם Python 3 ו- Rasterio. התסריט והייצוג בוצעו בסביבה אינטראקטיבית בשם Jupyter Notebook, ולבסוף נפתח georaster התוצאה ב- QGIS והושווה עם כמה תמונות רקע.


גזירת תמונת טיף באמצעות תמונת טיף אחרת באמצעות פייתון - מערכות מידע גיאוגרפיות

השתמש ב- Git או בקופה עם SVN באמצעות כתובת ה- URL.

עבוד מהר עם ה- CLI הרשמי שלנו. למד עוד.

משיק את GitHub Desktop

אם שום דבר לא קורה, הורד את GitHub Desktop ונסה שוב.

משיק את GitHub Desktop

אם שום דבר לא קורה, הורד את GitHub Desktop ונסה שוב.

השקת Xcode

אם שום דבר לא קורה, הורד את Xcode ונסה שוב.

השקת קוד Visual Studio

מרחב הקודים שלך ייפתח ברגע שמוכן.

הייתה בעיה בהכנת מרחב הקודים שלך, נסה שוב.


אינטראקציות בין קוראים

Keras & # 8211 שמור וטען את דגמי הלמידה העמוקים שלך

כיצד להשתמש ב- Keras fit ו- fit_generator (מדריך מעשי)

53 תגובות ל: תפירת תמונות עם OpenCV ופייתון

תודה על הדרכה נהדרת שוב.
השלבים האופייניים ליצירת פנורמה ממספר תמונות הם:

1. זיהוי תכונות
2. מתארי חישוב
3. התאמת תכונות
4. הסר התאמות שווא
5. חישבו הומוגרפיה
6. תמונות תפר
7. זיהוי תפרים
8. תערובת רב-פס לפנורמה סופית
9. יבול לתמונה סופית אסתטית

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

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

יש טיפים כיצד להאיץ זאת ולהפחית את הזמן לתפירת שתי תמונות סמוכות לכ- 2-4 שניות?

אני מנסה ליצור פנורמה באופן הדרגתי על ידי תפירת תמונות ברצף.

שלום Manmohan & # 8212 הייתי מציע להסתכל על פונקציונליות ה- GPU שרמזתי בפוסט. זה אמור לעזור לך באופן אידיאלי להאיץ את הצינור, אך ייתכן שיהיה עליך לרדת בחור הארנבון ולשחק עם קוד C ++ הגולמי כדי לגרום לו לעבוד (לא הצלחתי).

תודה @ Manmohan. תהיתי אם אוכל לתפור את המסגרות משלוש מצלמות ולהעביר זרם וידאו פנורמי. (כרגע אני משתמש במצלמת עין דג ברזולוציה גבוהה, אבל גם עם דה-עיוות התמונה אינה & # 8216 נכון & # 8217, ואני רוצה רזולוציה טובה יותר עבור התקרבות

התגובה שלך מביאה אותי להאמין שלעולם לא אקבל

15 פריימים לשנייה באמצעות תפירה.

(שיחקתי מאיצי הסקה (Movidius) אבל זה לא עוזר כאן)

אדריאן, מחשבות?
מקרה השימוש שלי הוא סרטון של שממה

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

האם מצלמת חיות הבר שלך נייחת ולא זזה? אם כן, כן, אתה יכול בהחלט להשיג 15 מעלות לשנייה. מדריך זה יראה לכם כיצד. תצטרך לעדכן את הקוד לעבודה עם יותר משתי תמונות או לפרוץ את מקור ה- OpenCV C ++ כדי לגשת למטריצת ההומוגרפיה הגולמית.

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

ככה עובד אלגוריתם התפירה של OpenCV. כל התמונות צריכות להיות רלוונטיות.

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

תודה רבה על ההדגמה המפורטת.

האם אתה חושב שסייתון יעזור להאיץ את תהליך התפירה?

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

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

טכנית כן, אבל לא ניסיתי עם היישום המסוים הזה. הקפד לנסות!

תודה שפרסמת, זה עזר לי מאוד.

כמו כן, רציתי לשאול האם אתה מעלה את ההודעה לתפירת פנורמה בזמן אמת עם יותר משתי מצלמות, בדיוק 4 מצלמות?

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

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

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

יש לי 3 תמונות רשתית שהתעקמו באמצעות הומוגרפיה באופן ידני (לא יכולתי להשתמש בפונקציה המובנית מכיוון שאיכויות התמונה היו גרועות). עכשיו אני רוצה למזג את התמונות האלה יחד. לא הצלחתי למצוא פונקציות פיתון opencv למיזוג. אני מפספס משהו?

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

האם הבנת איך לעשות זאת? אני נתקל בבעיה דומה.

שלום, תודה על הדרכה נהדרת נוספת.
הייתי רוצה לעשות תפירה אבל עם מצלמה ממעל.
כמו תמונות שצולמו ממזל"ט ולמתוח ברצף את התמונות האלה.
אילו צעדים עלי לשנות?
tnhks מראש

ניסית להשתמש בקוד כפי שהוא? אם כן, באילו בעיות נקלעתם?

כן. ניסיתי לצלם חבורה של תמונות כשהטלפון שלי מכוון כלפי מטה בזמן שהסתובבתי. (כך שהתמונה האחרונה תהיה דומה לזו הראשונה) הפלט ברזולוציה מנסה להכניס את התמונות למצב נוף כמו שכולם זה לצד זה

השתמשתי ב- pip install opencv_contrib_python, שהביא את opencv_contrib_python-3.4.4.19-cp37-cp37m-win_amd64.whl עבור פיתון 64 סיביות 3.7. זה לא מציג שגיאות במהלך ההתקנה. גרסת cv2 .__ מציגה 3.4.4. תאריך השחרור הוא 27 בנובמבר 2018.

הגדר את OPENCV_ENABLE_NONFREE CM אפשרות בחירה ובנה מחדש את הספרייה בפונקציה & # 8216cv :: xfeatures2d :: SURF :: create & # 8217

חשבתי ש- opencv_contrib_modules יכיל את כל המודולים שתרמו, או שזה לא מובטח?

לא, התקנת ה- pip של opencv-contrib-python אינה כוללת את המודולים NONFREE. כדי לאפשר אותם יהיה עליכם להרכיב את OpenCV מהמקור. עליך לעקוב אחר אחד ממדריכי ההתקנה של OpenCV שלי כדי להרכיב ממקור.

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

זהו מקרה שימוש די ספציפי. אתה יכול לנסות את זה ולראות אבל אני לא חושב שתצליח להשיג את רמת הדיוק הזו. זה בהחלט שווה בדיקה!

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

היית רוצה לפנות לבעלי הפטנטים. תוכל למצוא אותם באמצעות חיפוש הפטנטים של Google.

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

היי אמיליו & # 8212 אתה יכול להבהיר קצת יותר למה אתה מתכוון & # 8220 לאחזר התאמות משיטה זו & # 8221? מה בדיוק אתה מנסה להשיג?

היי אדריאן, ממש מדריך נחמד. יש לי רק ספק אחד קטן. אני חושב שזה יכול להיות בסגנון מה שאמיליו שאל. שיטה זו של stitcher_create () משתמשת ב- SIFT כדי למצוא נקודות מפתח, נכון? כך שניתן יהיה להשתמש בשיטת ORB במקום ב- SIFT.

ORB הוא קוד פתוח נכון ועל פי דף התיעוד של Opencv, אם הוא משולב עם התאמת FLANN אמור להיות מהיר יותר מ- SIFT + RANSAC. למרות שאולי אני טועה בכך שאני טועה בביצועים, רק רציתי לדעת אם ניתן להשתמש בשיטת ORB + FLANN.

מאמר מצוין ותודה שוב!

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

תודה על ההדרכה. זה מועיל להפליא. תהיתי אם תוכלי לעזור לי במשהו.

אני מנסה להשתמש ב- opencv ב- Python כדי ליצור פסיפס של תמונות. עד כה הצלחתי ליצור פסיפס מכ -20 תמונות. אבל אני מתקשה ללכת מעבר לזה. אני מקבל קוד סטטוס של 3 כאשר אני משתמש ביותר מ 20-25 תמונות. האם אתה יודע אם יש מגבלה על מספר / גודל התמונות שתוכל למזג באמצעות opencv.

התמונות שלי גדולות להפליא (4000 * 4000 פיקסלים). יש לי בערך 100 תמונות כאלה.

יש לך הצעות בשבילי? כמו כן, האם ניתן לראות את קוד opencv הגולמי עבור הפונקציות createStitcher () ו- stitch ()?

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

מצטער, אני לא מבין לגמרי את השאלה הזו. אתה משתמש במסגרות תפירה ואז מבצע חיסור / זיהוי רקע, נכון? אני לא בטוח כיצד ומדוע משתמשים באזורים הדומים & # 8221 או מדוע הם חשובים.

תודה על ההדגמה המדהימה הזו!

יש לי בעיה בזיכרון, אני מקבל את השגיאה הזו:

Traceback (רוב השיחות האחרונות האחרונות):
הקצאת 746307632 בתים נכשלה בפונקציה & # 8216cv :: OutOfMemoryError & # 8217

תסתכל על השגיאה שלך, זה מראה לך מה הבעיה: נגמר לך זיכרון RAM, ככל הנראה בגלל שאתה מנסה לתפור יותר מדי תמונות ו / או שהתמונות גדולות מדי (מבחינת הרזולוציה). נסה לשנות את גודל התמונות תחילה.

שלום אדריאן,
האם ניתן לפתור פאזל באמצעות פייתון ו- openCV? לקישור לשאוג יש כמה רעיונות והוא כבר ניסה אבל לא היה מזל.

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

האם ניתן להשתמש בקוד זה ליצירת מצלמת 360 ?? ואם זה לא יכול, אתה יכול לתת לי טיפ או הדרכה שיעזרו לי, בבקשה.
אני עובד על אפליקציית מצלמה 360.
תודה מראש.

מצטער, אין לי קוד למצלמת 360 פנורמה מלאה.

העיתון של Lowe מתוארך לשנת 2007 ולא לשנת 2017.

אופס, תודה שתפסת את זה!

שלום אדריאן, אני משתמש ב- opencv 4.1.0 אך קוד אינו מבוצע לאחר שורה זו
תפר = cv2.createStitcher () אם imutils.is_cv3 () אחר cv2.Stitcher_create ()

אז אתה יכול להגיד לי איפה הבעיה שלי?

מהי השגיאה שאתה מקבל?

אני משתמש באותה opencv 4.1.0 ומקבל שגיאת & # 8220Bus & # 8221 לאחר השיחה ל- stitcher.stitch (תמונות). לאחר מכן הקוד נעצר.

תודה בראד. אני בטוח נסתכל.

עם כמה תמונות ניתן לעשות זאת? ומה אם יש לי מגוון תמונות? כלומר שיש לא רק לעשות מצילום משמאל לימין, אלא גם מעלה ומטה.

תודה על ההדרכה הנפלאה. הייתי קורא קבוע של pyimagesearch ומצאתי שרוב הדברים שלך מועילים!

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

למה אתה מתכוון בבחירת ממדי המלבן? כל עוד יש לך את קו המתאר עצמו אתה יכול לחשב את פרטי תיבת התוחם באמצעות הפונקציה & # 8220cv2.boundingRect & # 8221. אם ברצונך לקבל מידע נוסף על קווי המתאר, עליך לעיין בפייתון מעשי וב- OpenCV.

אני מנסה להשתמש בשיטה זו כדי לתפור מספר תמונות מרובות (6 בסך הכל). כשאני מפעיל את התופר (לפני כל ניקוי התמונה הפנורמית), הוא תופר רק 2 מתוך 6 התמונות יחד. אני לא מקבל שום שגיאות. מה עלי לעשות?

אני מנסה להשתמש בשיטה זו כדי לתפר מספר תמונות מרובות. כשאני מריץ את התופר יחד 5 תמונות יחד. כאשר התמונה נתפרת, נקודות עיוות שחורות מתרחשות בנקודות החפיפה. מה הבעיה & # 8230?

היי אדריאן,
תודה על ההדרכה, פשוט מאוד לביצוע ומאוד אינפורמטיבי.
עם הפרויקט שלי אני נמצא בין הדרכה זו לבין הפנורמה & # 8220 בזמן אמת ותפירת תמונות עם Open-CV & # 8221, שם יש לי 3 מקורות וידיאו עם הצורך לתפור אותם לפנורמה. כיתת התפירה של OpenCV עושה עבודה ממש טובה ביצירת פאנו חלק, האם אין דרך לחלץ את מטריצות ההומוגרפיה שתוחל על 3 סרטונים עצמאיים שלאחר ההקלטה? בעיקרון הנה תהליך החשיבה שלי:
1. צלם תמונות משלוש מצלמות
2. בצע תפר ואחסן מטריצות הומוגרפיה איפשהו
3. הקלטו סרטונים משלוש המצלמות
4. החל מטריצות הומוגרפיה של פנורמה על סרטונים כדי ליצור פנורמה אחת

כל עזרה תוערך מאוד, המשך בעבודה הנהדרת ותודה שוב!
כל טוב, אנדי

למרבה הצער לא. OpenCV אינו חושף את מטריצת ההומוגרפיה. הלוואי שזה היה did

תודה רבה ששיתפת את החוויה שלך בראייה ממוחשבת. אני חדש בקורות החיים וכרגע מאמן את עצמי בעקבות ההודעה שלך. באמצעות הקוד שלך בפוסט זה, מצאתי את & # 8220status = 1 & # 8221 אחרי & # 8220 (סטטוס, תפור) = stitcher.stitch (תמונות) & # 8221 כשאני רוצה לתפור שתי תמונות משלי. האם תוכל בבקשה לומר לי כיצד עלי לפתור בעיה זו? או שזה נובע ממגבלת הפונקציה cv2.createStitcher ()? האם עלי לשנות את הפונקציה המחפשת את ההתאמות, אם כן, כיצד עלי לעשות זאת?

קטע תגובה

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

באותה תקופה קיבלתי 200+ מיילים ביום ועוד 100+ תגובות בבלוג. פשוט לא הספקתי להתמתן ולהגיב לכולם, והיקף הבקשות העצום גבה ממני מחיר.

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

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


אינטראקציות בין קוראים

שלושת הסוגים של מנועי חיפוש תמונות: חיפוש לפי מטא-נתונים, חיפוש לפי דוגמה והיברידי

OpenCV ו- Python K-Means אשכולות צבע

98 תגובות ל: מניפולציות בסיסיות של תמונות בפייתון וב- OpenCV: שינוי גודל (שינוי גודל), סיבוב וחיתוך

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

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

שאלה, היכן אוכל למצוא חיפוש תמונות עם imutils

היי ג'ון, קובץ imutils נכלל בקוד המקור של פוסט בבלוג זה. התכוונתי לשים את imutils.py על GitHub, אני אדאג שזה עדיפות.

אני עדיין לא מצליח למצוא קובץ imutils. הזכרת את הפוסט: https://www.pyimagesearch.com/2014/04/21/building-pokedex-python-finding-game-boy-screen-step-4-6/, אבל זה מפנה בחזרה לפוסט זה ב- Basic מניפולציות תמונה בפייתון וב- OpenCV. או אולי חסר לי משהו. תודה מראש!

תוכל למצוא את קובץ ה- imutils בהורדת קוד המקור של פוסט זה. או יותר טוב, הורד את הקוד ב- GitHub. הדרך הקלה ביותר להתקין אותו היא להשתמש ב:

ברצוני לשאול אותך בעיה. אנא יידע אותי שאתה זמין לצ'אט.

באפשרותך להסיר & # 8220 לייבא אימוטילים & # 8221, ולהשתמש בקוד הבא כדי להחליף & # 8220cv2.imshow (& # 8220Puzzle & # 8221, imutils.resize (פאזל, גובה = 650)) & # 8221.

r = 650.0 / puzzle.shape [0]
עמום = (int (puzzle.shape [1] * r), 650)

# בצע את גודל התמונה בפועל והראה אותה
גודל גודל = cv2.resize (פאזל, עמום, אינטרפולציה = cv2.INTER_AREA)

# להציג את התמונות
cv2.imshow (& # 8220Puzzle & # 8221, שינוי גודל)

היי זה מאמר נחמד מאוד ונהדר. חיפשתי לשנות את הגודל על ידי מתן גובה ורוחב. אתה יכול להגיד לי איך לעשות בקוד שלך

היי ג'יי, אם אתה רוצה לספק גם את הרוחב וגם את הגובה, פשוט שנה את הטולית העמומה. לדוגמה, בואו נגיד שרציתי להקשיח את גודל הקובץ שיש לשנות את גודל התמונה ל -32 & # 21532 פיקסלים, תוך התעלמות מיחס הגובה-רוחב. ואז הייתי משנה את הקוד שלי כך: שינוי גודל = cv2.resize (פאזל, (32, 32), אינטרפולציה = cv2.INTER_AREA)

מה אם אני לא רוצה להתעלם מיחס גובה-רוחב, ברצוני לשנות את גודל התמונה עם 1000 & # 215800 פיקסלים מבלי להתעלם מיחס הגובה-רוחב.
תודה אדריאן על ההודעות שלך, ממש מועיל.

כל שעליך לעשות הוא להשתמש בפונקציה imutils.resize שלי בתוך ספריית imutils. פונקציה זו תשמור על יחס גובה-רוחב.

היי
דף מעניין. בדיוק נרשמתי לקורס ההתרסקות שלך.
אבל שאלה מהירה.
מה אם אני רוצה לחתוך תמונה לא על בסיס מלבן אלא על עיגול -הגיד- ?? כיצד ניתן לעשות זאת באמצעות opencv?

תשובתך תהיה מוערכת ביותר

היי דייב, יש שתי דרכים לחתוך תמונה על בסיס מעגל. השיטה הראשונה תהיה לקחת את שטח המעגל ולהמיר אותו למלבן (על בסיס הרדיוס) ולחתוך את התמונה בצורה כזו. עם זאת, גישה טובה יותר תהיה לקחת את המעגל שלך ולהחיל קצת & # 8216and & # 8217 באמצעות פונקציית cv2.bitwise_and. בדוק פוסט זה וראה כיצד הפונקציה cv2.bitwise_and משמשת לחיתוך אזורים בצורת שרירותיות מהתמונה.

אתה יכול בבקשה להגיד לי איך לגזור תמונה בארבע רביעים ב- opencv באולפן החזותי 2010.

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

היי שייח, זה למעשה בלוג של Python + OpenCV, אני לא עושה שום קידוד C ++. אך באופן כללי, כל שעליך לעשות הוא לחשב את מרכז התמונה ואז להשתמש בזה כדי לחלץ את ארבעת הרבעים.

היי,
בחלק image.shape כתבת שהתמונה כוללת 388 עמודות, 647 שורות, אך נראה שהתמונה כוללת 388 שורות ו -647 עמודות. אז האם image.shape () נותן את הפלט כ- [שורות, cols, ערוצים]?

תודה על האזהרה! תיקנתי את הנושא הזה.

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

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

תודה לך, תודה לך. אני עמוק בתוך חבילת הפרימיום שלך, קורס ההתרסקות שלך, ומעריך מאוד את הבלוג הזה. אני מפלח דמויות חופפות מתיעוד משפחתי סיני עתיק בכתב יד (ג'יאפו) כמתנדב בספריית גנאלוגיה ציבורית. בספרייה יש מיליוני תמונות מצלמה שיש להוסיף לאינדקס המחשב באמצעות OCR לצורך מחשב מקוון המחפש שמות משפחה והיסטוריה. ניסיתי 2d fft לחלץ תכונות בהצלחה מוגבלת, ואנסה אחר כך את HOG. קראתי גם על מפלי האר.

התמונה הקצוצה שלך היא בצורת מלבני. איך חותכים שטח מעגלי בתמונה?

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

אז נוכל להשתמש במסכה במקום בכדי לראות רק שטח מעגלי? כיצד?

היי אקיף & # 8212 אתה יכול להעיף מבט בפוסט זה לדוגמא למסכה. אתה יכול לעשות את אותו הדבר באמצעות הפונקציה cv2.circle. אחרת, כדאי שתסתכל על פיתון מעשי ו- OpenCV שם אני מגלה מיסוך בפירוט רב יותר (כולל כיצד לחלץ מסיכת שטח עגול).

שלום, אוהב את האתר! אני אוהב להשוות בין מקורות שונים ומצאתי שאתה אחד הקריאות הקלות ביותר והוא תמיד מדויק. תודה על המשאב.

בסיבוב, אני חושב שלקחת את המניפולציה הקלה, 180 מעלות. הייתי צריך 90 והופתעתי מכך ש- cv2.imshow () לא מכיר את הסיבוב בממדים שלו. שינוי אחד נאלץ על ידי העברת רוחב וגובה ב- cv2.warpAffine (). עם זאת, התמונה קוזזה בחצי רוחב וחצי גובה. האם יש צורך לעשות זאת מחדש בתכנית cv2.imshow ()?

כמו כן, אם אתה נותן לסיבוב להתמודד עם גודל הגודל, בסופו של דבר תרחיש אחר לגמרי.

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

תודה על המילים החמות. ולגבי שיטת cv2.imshow ו- cv2.warpAffine, אני חושב שיש קצת בלבול. ל- cv2.imshow לא אכפת איך התמונה מסתובבת, איך היא מעוותת או מה התוכן שלה & 8212 היא פשוט לוקחת את התוכן של מערך NumPy ומציגה אותו למסך.

במקרה שאתה צריך לסובב תמונה ועדיין שכל החלקים שלה יתאימו לגודל מערך ה- NumPy שהוקצה (בערך כמו להקצות מערך ב- C / C ++), אז תצטרך להתמודד עם זה בעצמך. אם אתה צריך לסובב 90 מעלות (או כל דרגה אחרת), פשוט ציין את גודל התמונה לאחר הסיבוב לשיטת cv2.warpAffine וזה יעבוד. ראה שאלה זו של StackOverflow למידע נוסף.

מה דעתך על img = scipy.ndimage.rotate ()?

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

תודה על המידע שלך על עיבוד תמונות, באמת מועיל.

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

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

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

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

כיצד למצוא את startY, endY ו- startX, endX במהלך משימת החיתוך כשאין סולם התייחסות זמין? מודה לך מראש.

היי Sumit & # 8212 אתה יכול לפרט יותר על מה שאתה מנסה לעשות? אם אינך יודע את הקואורדינטות ההתחלתיות והסיומות, עליך & # 8220 למצוא & # 8221 אותם בתמונתך. יש הרבה אלגוריתמים לעשות את זה, אבל זה באמת תלוי במה שאתה מנסה להשיג.

איך לחתוך צורה לא סדירה מתמונה?

אתה לא יכול & # 8220 לחתוך & # 8221 צורה לא מלבנית מתמונה. יש לציין את כל החזר ה- ROI על החיתוך במונחים של קואורדינטות (x, y). עם זאת, ניתן להשתמש במסכות כדי להגדיר צורות לא סדירות של תמונה & # 8212 אך שוב, בהגדרת תמונה, כל החיתוכים מלבניים.

איך נוכל לחתוך 2 מלבנים מאותה תמונה?
במקרה של גילוי אם קיימים שני פנים בתמונה אחת, כיצד נוכל לחתוך כל פנים בו זמנית

אני לא בטוח למה אתה מתכוון & # 8220 חיתוך כל פרצוף בו זמנית & # 8221, אבל אנחנו בדרך כלל חותכים תיבה תוחמת עבור כל אחד של הפנים בתמונות. זה אומר שאם אתה מזהה 2 פנים בתמונה, בסופו של דבר יש לך 2 תיבות תוחמות, ולכן 2 אזורים חתוכים. האם זה מה שאתה מנסה לעשות? אחרת, אני לא מבין את שאלתך.


חיתוך תמונות באמצעות כלי שורת פקודה בלבד

הנה דרך לעקיפת הבעיה באמצעות המרה מחבילת magick התמונה.

כפי שמוצג לעיל, תמונת הקלט היא 720x482px.

עכשיו כדי לבצע חיתוך אתה צריך לקבוע שני גורמים:

  1. נקודת התחלה של החיתוך (כוללת 2 כיוונים)
  2. גודל המלבן החתוך (כאן תוכלו לכלול את ההוראות האחרות)

עכשיו חזור לתמונה image.jpg למעלה, אני רוצה לחתוך:

אז אתה יכול לעשות את זה עם (רוחב x גובה + שמאל + עליון / רוחב x h + l + t פורמט):

אם אתה רוצה לקצץ אזורים לבנים, ל- imagemagick יש פקודה מיוחדת:

כדי ליצור אפשרות "ידידותית למשתמש", ניתן להשתמש בתסריט שלמטה. פשוט הפעל את הפקודה:

זה יוצר תמונה חתוכה של image.jpeg, בשם image [חתוך] .jpeg באותה ספריה.

התסריט

איך להישתמש

התסריט משתמש ב- imagemagick

שמור את הסקריפט לעיל כ- crop_image (ללא סיומת) ב

כעת פשוט הפעל את התסריט בשמו, כאמור, למשל:

רווחים אינם מהווים בעיה, כל עוד במקרה זה אתה משתמש במרכאות:

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

עכשיו, שימו לב לארבעת הדברים האלה:

  1. הרוחב (W) בפיקסל של המלבן
  2. גובה (H) של המלבן
  3. מרחק הצד האנכי השמאלי של המלבן מהשוליים / הקצה השמאלי (L) של התמונה
  4. מרחק הצד העליון של המלבן מהשוליים העליונים / מקצה התמונה (T).

לפיכך יש לך כעת ערכי W, H, L ו- T. בינתיים הכל טוב. כדי לדעת את הפיקסלים, אתה יכול להתקין את כלי krule באובונטו. שימושי מאוד.

כעת, פתח את המסוף ועבור לתיקיה בה מאוחסנת התמונה. השתמש בפקודה הבאה והצב את הערכים של W, H, L ו- T כהלכה:


גזירת תמונת טיף באמצעות תמונת טיף אחרת באמצעות פייתון - מערכות מידע גיאוגרפיות

autoRIFT (מעקב אחר תכונות תמונה חוזרות ואוטונומיות)

A Python module of a fast and intelligent algorithm for finding the pixel displacement between two images

autoRIFT can be installed as a standalone Python module (only supports Cartesian coordinates) either manually or as a conda install (https://github.com/conda-forge/autorift-feedstock). To allow support for both Cartesian and radar coordinates, autoRIFT must be installed with the InSAR Scientific Computing Environment (ISCE: https://github.com/isce-framework/isce2)

Use cases include all dense feature tracking applications, including the measurement of surface displacements occurring between two repeat satellite images as a result of glacier flow, large earthquake displacements, and land slides

autoRIFT can be used for dense feature tracking between two images over a grid defined in an arbitrary geographic Cartesian (northing/easting) coordinate projection when used in combination with the sister Geogrid Python module (https://github.com/leiyangleon/Geogrid). Example applications include searching radar-coordinate imagery on a polar stereographic grid and searching Universal Transverse Mercator (UTM) imagery at a specified geographic Cartesian (northing/easting) coordinate grid

Copyright (C) 2019 California Institute of Technology. Government Sponsorship Acknowledged.

Alex Gardner (JPL/Caltech [email protected]) first described the algorithm "auto-RIFT" in (Gardner et al., 2018) and developed the first version in MATLAB

Yang Lei (GPS/Caltech [email protected]) translated it to Python, further optimized and incoporated to the ISCE software

Piyush Agram (JPL/Caltech [email protected]) set up the installation as a standalone module and further cleaned the code.

This effort was funded by the NASA MEaSUREs program in contribution to the Inter-mission Time Series of Land Ice Velocity and Elevation (ITS_LIVE) project (https://its-live.jpl.nasa.gov/) and through Alex Gardner’s participation in the NASA NISAR Science Team

  • fast algorithm that finds displacement between the two images (where source and template image patches are extracted and correlated) using sparse search and iteratively progressive chip (template) sizes
  • for intelligent use, user can specify unstructured spatially-varying search centers (center of the source image patch), search offsets (center displacement of the template image patch compared to the source image patch), chip sizes (size of template image patch), search ranges (size of the source image patch)
  • faster than the conventional dense feature tracking "ampcor"/"denseampcor" algorithm included in ISCE by nearly 2 orders of magnitude
  • supports various preprocessing modes for specified image pair, e.g. either the raw image (both texture and topography) or the texture only (high-frequency components without the topography) can be used with various choices of the high-pass filter options
  • supports image data format of unsigned integer 8 (uint8 faster) and single-precision float (float32)
  • user can adjust all of the relevant parameters, as detailed below in the instructions
  • a Normalized Displacement Coherence (NDC) filter is developed (Gardner et al., 2018) to filter the chip displacemnt results based on displacement difference thresholds that are scaled to the local search range
  • a sparse integer displacement search is used to narrow the template search range and to eliminate areas of "low coherence" for fine decimal displacement search and following chip size iterations
  • novel nested grid design allows chip size progressively increase iteratively where a smaller chip size failed
  • a light interpolation is done to fill the missing (unreliable) chip displacement results using median filtering and bicubic-mode interpolation (that can remove pixel discrepancy when using other modes) and an interpolation mask is returned
  • the core displacement estimator (normalized cross correlation) and image pre-processing call OpenCV's Python and/or C++ functions for efficiency
  • sub-pixel displacement estimation using a fast Gaussian pyramid upsampling algorithm that is robust to sub-pixel locking the intelligent (chip size-dependent) selection of oversampling ratio is also supported for a tradeoff between efficiency and accuracy
  • the current version can be installed with the ISCE software (that supports both Cartesian and radar coordinates) or as a standalone Python module (Cartesian coordinates only)
  • when used in combination with the Geogrid Python module (https://github.com/leiyangleon/Geogrid), autoRIFT can be used for feature tracking between image pair over a grid defined in an arbitrary geographic Cartesian (northing/easting) coordinate projection
  • when the grid is provided in geographic Cartesian (northing/easting) coordinates, outputs are returned in geocoded GeoTIFF image file format with the same EPSG projection code as input search grid
  • [NEW] For feature tracking of optical images, the program now supports fetching optical images (Landsat-8 GeoTIFF and Sentinel-2 COG formats are included) as well as other inputs (e.g. DEM, slope, etc all in GeoTIFF format) from either local machine or remotely using GDAL virtual file systems (e.g., /vsicurl/https://. ). For feature tracking of radar images, the program now supports fetching auxiliary inputs (e.g. DEM, slope, etc all in GeoTIFF format) from either local machine or remotely. See the changes on the Geogrid commands.
  • [NEW] parallel computing has been added for Normalized Cross-Correlation (NCC). When using the autoRIFT commands below, users need to append a multiprocessing flag: "-mpflag $num" with "$num" being the number of threads used if not specified, the single-core version is used.

4. Possible Future Development

  • for radar (SAR) images, it is yet to include the complex correlation of the two images, i.e. the current version only uses the amplitude correlation
  • the GPU implementation would be useful to extend

5.1 Optical image over regular grid in imaging coordinates

Output of "autoRIFT" module for a pair of Landsat-8 images (20170708-20170724 same as the Demo dataset at https://github.com/leiyangleon/Geogrid) in Greenland over a regular-spacing grid: (a) estimated horizontal pixel displacement, (b) estimated vertical pixel displacement, (c) chip size used, (d) light interpolation mask.

This is done by implementing the following command line:

where "I1" and "I2" are the reference and test images as defined in the instructions below. The "-fo" option indicates whether or not to read optical image data.

5.2 Optical image over user-defined geographic Cartesian coordinate grid

Output of "autoRIFT" module for a pair of Landsat-8 images (20170708-20170724 same as the Demo dataset at https://github.com/leiyangleon/Geogrid) in Greenland over user-defined geographic Cartesian (northing/easting) coordinate grid (same grid used in the Demo at https://github.com/leiyangleon/Geogrid): (a) estimated horizontal pixel displacement, (b) estimated vertical pixel displacement, (c) light interpolation mask, (d) chip size used. Notes: all maps are established exactly over the same geographic Cartesian coordinate grid from input.

This is done by implementing the following command line:

where "I1" and "I2" are the reference and test images as defined in the instructions below, and the optional inputs "winlocname", "winoffname", "winsrname", "wincsminname", "wincsmaxname", "winro2vxname", "winro2vyname" are outputs from running "testGeogrid_ISCE.py" or "testGeogridOptical.py" as defined at https://github.com/leiyangleon/Geogrid. When "winlocname" (grid location) is specified, each of the rest optional input ("win * name") can be either used or omitted.

Final motion velocity results by combining outputs from "Geogrid" (i.e. matrix of conversion coefficients from the Demo at https://github.com/leiyangleon/Geogrid) and "autoRIFT" modules: (a) estimated motion velocity from Landsat-8 data (x-direction in m/yr), (b) motion velocity from input data (x-direction in m/yr), (c) estimated motion velocity from Landsat-8 data (y-direction in m/yr), (d) motion velocity from input data (y-direction in m/yr). Notes: all maps are established exactly over the same geographic Cartesian (northing/easting) coordinate grid from input.

5.3 Radar image over regular grid in imaging coordinates

Output of "autoRIFT" module for a pair of Sentinel-1A/B images (20170221-20170227 same as the Demo dataset at https://github.com/leiyangleon/Geogrid) at Jakobshavn Glacier of Greenland over a regular-spacing grid: (a) estimated range pixel displacement, (b) estimated azimuth pixel displacement, (c) chip size used, (d) light interpolation mask.

This is obtained by implementing the following command line:

where "I1" and "I2" are the reference and test images as defined in the instructions below.

5.4 Radar image over user-defined geographic Cartesian coordinate grid

Output of "autoRIFT" module for a pair of Sentinel-1A/B images (20170221-20170227 same as the Demo dataset at https://github.com/leiyangleon/Geogrid) at Jakobshavn Glacier of Greenland over user-defined geographic Cartesian (northing/easting) coordinate grid (same grid used in the Demo at https://github.com/leiyangleon/Geogrid): (a) estimated range pixel displacement, (b) estimated azimuth pixel displacement, (c) light interpolation mask, (d) chip size used. Notes: all maps are established exactly over the same geographic Cartesian coordinate grid from input.

This is done by implementing the following command line:

where "I1" and "I2" are the reference and test images as defined in the instructions below, and the optional inputs "winlocname", "winoffname", "winsrname", "wincsminname", "wincsmaxname", "winro2vxname", "winro2vyname" are outputs from running "testGeogrid.py" as defined at https://github.com/leiyangleon/Geogrid. When "winlocname" (grid location) is specified, each of the rest optional input ("win * name") can be either used or omitted.

Runtime comparison for this test (on an OS X system with 2.9GHz Intel Core i7 processor and 16GB RAM):

  • autoRIFT (single core): 10 mins
  • Dense ampcor from ISCE (8 cores): 90 mins

Final motion velocity results by combining outputs from "Geogrid" (i.e. matrix of conversion coefficients from the Demo at https://github.com/leiyangleon/Geogrid) and "autoRIFT" modules: (a) estimated motion velocity from Sentinel-1 data (x-direction in m/yr), (b) motion velocity from input data (x-direction in m/yr), (c) estimated motion velocity from Sentinel-1 data (y-direction in m/yr), (d) motion velocity from input data (y-direction in m/yr). Notes: all maps are established exactly over the same geographic Cartesian (northing/easting) coordinate grid from input.

  • First install ISCE (https://github.com/isce-framework/isce2)
  • Put the "geo_autoRIFT" folder and the "Sconscript" file under the "contrib" folder that is one level down ISCE's source directory (denoted as "isce-version" where you started installing ISCE), i.e. "isce-version/contrib/" (see the snapshot below)

  • Run "scons install" again from ISCE's source directory "isce-version" using command line
  • This distribution automatically installs the "autoRIFT" module as well as the "Geogrid" module (https://github.com/leiyangleon/Geogrid).

1) Manual Install:

  • Put the "geo_autoRIFT" folder and the "setup.py" file under some source directory (see the snapshot below)

  • Run "python3 setup.py install" or "sudo python3 setup.py install" (if the previous failed due to permission restriction) using command line
  • This distribution automatically installs the "autoRIFT" module as well as the "Geogrid" module (https://github.com/leiyangleon/Geogrid)
  • The standalone version only supports Cartesian coordinate imagery. However, if the above "With ISCE" version is installed independently, the standalone version can also support radar coordinate imagery.
  • If the modules cannot be imported in Python environment, please make sure the path where these modules are installed (see "setup.py") to be added to the environmental variable $PYTHONPATH.

2) Conda Install:

  • The source code "geo_autoRIFT" folder can also be installed via conda-forge channels. Please follow the instructions on the following page (with no more than three command lines): https://github.com/conda-forge/autorift-feedstock
  • This distribution automatically installs the "autoRIFT" module as well as the "Geogrid" module (https://github.com/leiyangleon/Geogrid)
  • The standalone version only supports Cartesian coordinate imagery. However, if the above "With ISCE" version is installed independently, the standalone version can also support radar coordinate imagery.
  • If the modules cannot be imported in Python environment, please make sure the path where these modules are installed (search for the modules in "anaconda3" directory) to be added to the environmental variable $PYTHONPATH.
  • When the grid is provided in geographic Cartesian (northing/easting) coordinates (geographic coordinates lat/lon is not supported), it is required to run the "Geogrid" module (https://github.com/leiyangleon/Geogrid) first before running "autoRIFT". In other words, the outputs from "testGeogrid_ISCE.py" or "testGeogridOptical.py" (a.k.a "winlocname", "winoffname", "winsrname", "wincsminname", "wincsmaxname", "winro2vxname", "winro2vyname") will serve as optional inputs for running "autoRIFT" at a geographic grid, which is required to generate the final motion velocity maps.
  • When the outputs from running the "Geogrid" module are not provided, a regular grid in the imaging coordinates will be automatically assigned

For quick use:

  • Refer to the file "testautoRIFT.py" (standalone) and "testautoRIFT_ISCE.py" (with ISCE) for the usage of the module and modify it for your own purpose
  • Input files include the reference image (required), test image (required), and the outputs from running "testGeogrid_ISCE.py" or "testGeogridOptical.py" (optional a.k.a "winlocname", "winoffname", "winsrname", "wincsminname", "wincsmaxname", "winro2vxname", "winro2vyname"). When "winlocname" (grid location) is specified, each of the rest optional input ("win * name") can be either used or omitted.
  • Output files include 1) estimated horizontal displacement (equivalent to range for radar), 2) estimated vertical displacement (equivalent to minus azimuth for radar), 3) light interpolation mask, 4) iteratively progressive chip size used.

Note: These four output files will be stored in a file named "offset.mat" that can be viewed in Python and MATLAB. When the grid is provided in geographic Cartesian (northing/easting) coordinates, a 4-band GeoTIFF with the same EPSG code as input grid will be created as well and named "offset.tif" a 2-band GeoTIFF of the final converted motion velocity in geographic x- (easting) and y- (northing) coordinates will be created and named "velocity.tif". Also, it is possible to save the outputs in netCDF standard format by adding the "-nc" option to the "testautoRIFT.py" (standalone) and "testautoRIFT_ISCE.py" (with ISCE) command.

For modular use:

  • In Python environment, type the following to import the "autoRIFT" module and initialize the "autoRIFT" object

The "autoRIFT" object has several inputs that have to be assigned (listed below can also be obtained by referring to "testautoRIFT.py"):

After the inputs are specified, run the module as below

where "XXX" can be "wal" for the Wallis filter, "hps" for the trivial high-pass filter, "sob" for the Sobel filter, "lap" for the Laplacian filter, and also a logarithmic operator without filtering is adopted for occasions where low-frequency components (i.e. topography) are desired, i.e. "obj.preprocess_db()".

The "autoRIFT" object has the following four outputs:

The "autoRIFT" object has many parameters that can be flexibly tweaked by the users for their own purpose (listed below can also be obtained by referring to "geo_autoRIFT/autoRIFT/autoRIFT_ISCE.py"):


Color model

Digital images use some color model to create a broad range of colors from a small set of primary colors. Although there are several different color models that are used for images, the most commonly occurring one is the RGB (Red, Green, Blue) model.

The RGB model is an additive color model, which means that the primary colors are mixed together to form other colors. In the RGB model, the primary colors are red, green, and blue – thus the name of the model. Each primary color is often called a channel.

Most frequently, the amount of the primary color added is represented as an integer in the closed range [0, 255]. Therefore, there are 256 discrete amounts of each primary color that can be added to produce another color. The number of discrete amounts of each color, 256, corresponds to the number of bits used to hold the color channel value, which is eight (2 8 =256). Since we have three channels, this is called 24-bit color depth.

Any particular color in the RGB model can be expressed by a triplet of integers in [0, 255], representing the red, green, and blue channels, respectively. A larger number in a channel means that more of that primary color is present.


Frequently Asked Questions

By default, PDF2Image saves rasterized files in the current working folder. To specify another output location, use the '-o' (or --output) parameter. לדוגמה:

pdf2image --o "c:My Output" 1.pdf 2.pdf 3.pdf

Note: If the specified path does not exist, PDF2Image will attempt to create the necessary folders.

How can I control the output name for rasterized/converted images?

By default, PDF2Image creates a separate image file for every page in the document. The output filename is constructed using the name of the input PDF file, page counter, and appropriate image extension. For example, the following command-line generates a sequence of image files starting with mydoc_1.jpg, mydoc_2.jpg, etc.:

PDF2Image allows output filename customizations using the '--prefix' and '--digits' options. For example, the following command-line generates a sequence of image files starting with newname_0001.jpg, newname_0002.jpg, etc.:

pdf2image -f jpg --prefix newname --digits 4 mydoc.pdf

The '--digits' parameter specifies the number of digits used in the page counter portion of the output filename. By default, new digits are added as needed, however this parameter could be used to format the page counter field to a uniform width (e.g. myfile0001.jpg, myfile0010.jpg, instead of myfile_1.jpg, myfile_10.jpg, etc).

To avoid any ambiguities in file naming, the prefix option should be used only for conversion of individual documents.

If your output image format is TIFF, you can convert PDF to a single, multi-page TIFF document using the '--multipage' option (See 'How do I convert PDF to multi-page TIF?' for an example).

How do I convert PDF to JPEG, PNG, TIF or some other image format?

By default, PDF2Image automatically converts PDF to PNG. The output image format can be modified using the '-f' (or --format) option. לדוגמה,

The '--format' parameter accepts any of the following output formats:

  • png - (Portable Network Graphics)
  • png8 -- (Palletized PNG)
  • jpg or jpeg (Joint Photographic Expert Group)
  • tif אוֹ tiff (Tagged Image File Format)
  • bmp (Windows Bitmap Format)
  • raw (raw RGB or Gray data)

How do I convert PDF to multi-page TIF?

If your output image format is TIFF, you can convert PDF to a single, multi-page TIFF document instead of a separate file for every page using the '--multipage' option.

pdf2image --multipage -f tif --verb 3 mypdf.pdf

How do I open a password protected PDF?

PDF2Image will, without user intervention, decrypt and convert documents secured with a master/owner password. If the document is secured using a user (or file open) password, PDF2Image will prompt you to enter the password.

For unattended conversion, the password can also be specified directly on the command-line using the '-p' (or --password) option. לדוגמה:

pdf2image -p secret -f png secured.pdf

The above command line will convert PDF to PNG and will use the provided password ('secret') to open the secured document (i.e. 'secured.pdf').

Note: PDF2Image supports all standard security options available in PDF, including 40 and 128 bit RC4 encryption, Crypt filters, and 128 AES (Advanced Encryption Standard) encryption.

How do I create grayscale images?

By default, PDF2Image uses the RGB color model for rasterization and image export. You can instruct PDF2Image to use single channel Device Gray color model for rasterization and image export using the '--gray' option. לדוגמה:

pdf2image -f tiff --gray in.pdf

How do I specify which pages to convert?

By default, PDF2Image will rasterize and convert all PDF pages to output image format. You can specify a subset of pages to convert using the '-a' or '--pages' options. לדוגמה:

will convert only pages 1, 3, and 10. Please note that PDF2Image assumes that all pages are numbered sequentially starting from page 1.

To specify a range of pages, use dash character between numbers. לדוגמה:

pdf2image -a 1,10-20,50- in.pdf

will render the first page, pages in the range from 10 to 20 and all pages starting with page 50 to the last page in the document.

All even pages can be selected using the ɾ' (or ɾven') string. For example, the following line renders all even pages:

pdf2image --pages even in.pdf

Similarly odd pages can be selected using the 'o' (or 'odd') string. The following line renders all odd pages in the document and every page in the range from 100 to the last page:

pdf2image --pages odd,100- in.pdf

How do I specify the resolution of the output image?

Using PDF2Image output image resolution can be specified explicitly (using the '--d' or '--dpi' option) or implicitly (using the '--hres' and '--vres' parameters). In this section, we cover the use of the '--dpi' parameter. For more information on the '--hres' and '--vres' parameters, see 'How do I specify dimensions of the output image in pixels?'

By default, PDF2Image uses resolution of 92 Dots Per Inch (DPI), which is the typical screen resolution. Smaller DPI numbers result in smaller images (e.g. suitable for use as thumbnails), while larger DPI numbers generate larger images (e.g. suitable for high-quality output).

For example, to convert a PDF document to a multi-page TIF at 300 DPI (Dots Per Inch), use the following line:

pdf2image -f tif --multipage --dpi 300 in.pdf

Depending on the dimensions of the input page, high DPI/resolution rasterization requires lots of memory. For example, rasterization of a single A4 page (8x11) at 1000 DPI will require more than 350MB of memory. If PDF2Image fails to allocate enough memory, you can render the image in stripes or tiles, as described in 'How do I render high-resolution images', or by trying to decrease DPI value.

A 'typical' range of acceptable DPI values is between 1 and 1000 DPI. PDF2Image can rasterize images beyond 1000 or 2000 DPI using tiled or striped rendering.

How do I specify dimensions of the output image in pixels?

To specify absolute dimensions of the output image in pixels, use the '--hres' and '--vres' parameters.

When these parameters are specified, PDF2Image will automatically determine the DPI (Dots Per Inch) ratio required to match the pixel dimensions of the output image.

For example, to generate 100 by 100 pixels thumbnails for a given PDF, you can use the following line:

pdf2image -f jpg --hres 100 --vres 100 in.pdf

Because the input PDF page may not perfectly fit the absolute pixel size of the output image, PDF2Image will also center the page and preserve the aspect ratio during rendering.

To generate images that are proportional in their size to the input PDF pages, simply omit one of the parameters (either --hres or --vres). לדוגמה,

pdf2image -f jpg --hres 100 in.pdf

will convert all PDF pages to images that are 100 pixels wide, with height proportional to the dimensions of the input page.

Similarly, the following line will create images with fixed height (100 pixels) and variable width (to preserve the aspect ratio).

pdf2image -f jpg --vres 100 in.pdf

How do I render only a subset of a given page?

Using PDF2Image you can rasterize a subset of a page using the '--clip' parameter. The parameter accepts a list of four numbers, separated using commas, giving the coordinates of a pair of diagonally opposite corners. Typically, the list takes the form: llx, lly, urx, ury specifying the lower-left איקס, lower-left y, upper-right איקס, and upper-right y coordinates of the rectangle, in that order. The other two corners of the rectangle are then assumed to have coordinates (llx, ury) and (urx, lly). All coordinates need to be expressed in points (a basic unit of PDF 'user' coordinate system). One PDF point is 1⁄72 of an inch and is approximately the same as a point (unit commonly used in the printing industry).

The '--clip' parameter is not only useful for cropping pages, but it can be also used to speed up the rendering process and to reduce memory consumption (see 'How to I render very large images?' for details).

PDF2Image also supports clipping to predefined page regions, such as page media, crop, trim, bleed, and art box. For more information on clipping to predefined regions, see 'How can I show/hide crop marks or the trim region?

How do I render very large images?

Depending on the dimensions of the input page, high DPI/resolution rasterization requires lots of memory. For example, rasterization of a single A4 page (8x11) at 1000 DPI will require more than 350MB of memory. If PDF2Image fails to allocate enough memory (a single contiguous block of memory), you can render the image in stripes or tiles by repeatedly rendering different regions of the page using the '--clip' parameter (also see 'How do I render only a subset of a given page?').

For example, if the input page has a media box 0,0,595,842, you could render the page at 2000 DPI (Dots Per Inch) in four stripes (using 210.5 point increments along the Y axis) as follows:

pdf2image --dpi 2000 --clip 0,0,595,210.5 --prefix t01 Test/tiger.pdf

pdf2image --dpi 2000 --clip 0,210.5,595,421 --prefix t02 Test/tiger.pdf

pdf2image --dpi 2000 --clip 0,421,595,631.5 --prefix t03 Test/tiger.pdf

pdf2image --dpi 2000 --clip 0,631.5,595,842 --prefix t04 Test/tiger.pdf

Rendering of the same image in a single pass would require more than 1.4 GB in memory.

How do I batch convert files?

PDF2Image supports batch conversion of many PDF files in a single pass. To convert all PDF files in a given folder(s) you can use the following syntax:

The '--subfolders' option can be used to recursively process all subfolders. For example, the following line will convert all documents in 'myfolder1' and 'myfolder2' as well as all subfolders:

pdf2image --subfolders myfolder1 myfolder2

By default, PDF2Image will convert all files with the extension '.pdf'. To select different files based on the extension use the '--extension' parameter. For example, to convert all PDF documents with a custom extension '.blob', you could use the following line:

pdf2image --extension .blob --subfolders myfolder1

How do I specify compression ratio for JPEG format?

The JPEG image format offers a lossy type of compression and the option to trade between the loss in image quality and compression ratio. To fine-tune JPEG compression quality, use the '--quality' parameter as illustrated in the following sample:

pdf2image --quality 80 -f jpg Test/tiger.pdf

Compression quality is a number in the range from 1 to 100. Lower numbers usually result in better compression at the expense of image quality. The default in 80.

How can I rotate pages?

By default, PDF2Image respects page rotation attribute. Image rotation can be modified using the '-r' (or --rotate) option. For example, the following line rotates all pages 90 degrees counterclockwise:

pdf2image --rotate 90 Test/tiger.pdf

Similarly, the following line rotates the page 270 degrees counterclockwise (or 90 degrees clockwise):

pdf2image --rotate 270 Test/tiger.pdf

How can I show/hide crop marks or the trim region?

A PDF page can define as many as five separate boundaries to control various aspects of the imaging process:

  • The media box defines the boundaries of the physical medium on which the page is to be printed. It may include any extended area surrounding the finished page for bleed, printing marks, or other such purposes. It may also include areas close to the edges of the medium that cannot be marked because of physical limitations of the output device. Content falling outside this boundary can safely be discarded without affecting the meaning of the PDF file.
  • The crop box defines the region to which the contents of the page are to be clipped (cropped) when displayed or printed. Unlike the other boxes, the crop box has no defined meaning in terms of physical page geometry or intended use it merely imposes clipping on the page contents. The default value is the page's media box.
  • The bleed box defines the region to which the contents of the page should be clipped when output in a production environment. This may include any extra bleed area needed to accommodate the physical limitations of cutting, folding, and trimming equipment. The default value is the page's crop box.
  • The trim box defines the intended dimensions of the finished page after trimming. It may be smaller than the media box to allow for production related content, such as printing instructions, cut marks, or color bars. The default value is the page's crop box.
  • The art box defines the extent of the page's meaningful content (including potential white space) as intended by the page's creator. The default value is the page's crop box.

By default, PDF2Image uses the page crop box as a default clip region. Different page regions can be selected as the default clip region using the -b (or --box) parameter. For example, the following line will instruct PDF2Image to use the media box for rasterization:

pdf2image --box media in.pdf

How do I render PDF as CCITT Group 4 FAX TIFF or monochrome PNG?

To render the PDF as a monochrome (1 bit per pixel) image compressed using G4 CCITT, simply add the option '--mono' within the command-line string. לדוגמה,

pdf2image --mono -f TIFF --verb 10 --dpi 300 in.pdf

Does PDF2Image have any dependencies on third party components/software?

PDF2Image is a completely stand alone application and does not include any dependencies on third-party components or software.


Audio Regression

Regression is the task of estimating the value of an unknown variable (instead of distinct class labels), given a respective feature vector. It can also be rather important in the context of an audio analysis application, in cases there are mappings from audio features to a real-valued variable. A typical example is speech emotion estimation, where the emotions are not represented by discrete classes (e.g. Anger, Happiness, etc) but by dimensional representations (e.g. Valence—Arousal). The library supports SVM regression training in order to map audio features to one or more supervised variables. In order to train an audio regression model the user should provide a series of audio segments stored in separate files in the same folder. In addition, the user must provide a comma-separated-file (CSV), where the respective ground-truth values of the output variable are stored. During the training phase, for each CSV file a separate variable is trained.

Note that the regression training functionality also contains a parameter tuning procedure, where a cross-validation evaluation is performed, similar to that of the classification case. However, the performance measure maximized in the context of the regression training procedure is the Mean Square Error (MSE). In addition to that, for each tested parameter value, the MSE of the training data is also calculated to provide a measure of “overfitting”. Finally, the parameter tuning procedure returns the MSE of the “average estimator”, i.e. a method that always returns the average value of the estimated parameter (based on the training data), in order to provide a baseline performance measure. This is equivalent to the “random classifier” used as a worst-case performance when evaluating classification methods.


צפו בסרטון: מדריך פייתון - 5 - משתנים