עיבוד תמונה

gilad_no

New member
עיבוד תמונה

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

gilad_no

New member
אין לי מושג איך לממש :)

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

codec

New member
תחפש גבולות "רחבים"

בהנחה ש-SPACE הוא ברוחב של אות (בערך...)
 

עידו123456

New member
והפרופורציות נשמרות פחות או יותר

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

selalerer

New member
אתה חייב לזהות את הגופן.

בכדי לזהות את הגובה באופן מדוייק אתה חייב להחזיק DB של הגופנים האפשריים, מתוכם אתה מנסה לזהות את הגופן של האות הראשונה במדוייק (דיוק של 99%) ואז לפי הגופן אתה יודע את הגובה של האות, כמה היא למעלה ממה שאתה רואה (לפי מה שמוגדר בגופן) וכמה היא למטה ממה שאתה רואה את האות, השאלה היא כמה התמונה שאתה מקבל באמת משקפת את הגופן, למשל אני שאני כותב בBMP של WINDOWS בצייר ואז שומר את התמונה הוא עושה לי "החלקת גופנים" כלומר קצת מטשטש את הגבול של האות ואז זה יוצא, נאמר 95% מדוייק לגופן, השאלה היא כמה מדוייקת התמונה לגופן?
 

עידו123456

New member
אתה מציע לו בעצם לבנות OCR בעצמו

זה קצת מיותר אם הוא משתמש ב OCR צד ג'
 

selalerer

New member
לו הייתי יודע מה זה OCR הייתי....

... או מסכים איתך או חולק עליך.
 

DecayCell

New member
זה לא משנה

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

selalerer

New member
תשמע, או שיש לו OCR מוכן שהוא

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

DecayCell

New member
אבל בשביל לחשב את הקלט...

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

selalerer

New member
אז:

אם מדובר נאמר על פונט שחור על גבי לבן אז הוא סורק את הBITMAP ומחפש את הפיקסל השחור עם הY הקטן ביותר (הגבוה מבחינת המראה), את הפיקסל השחור עם הY הגדול ביותר, את הפיקסל השחור עם הX הקטן ביותר ואת הפיקסל השחור עם X הגדול ביותר ואלה הן הגבולות של המלבן.
 

gilad_no

New member
לא מדוייק

אכן יש לי OCR מוכן, אבל הוא מקבל קורדינטות ותמונה. אני מעביר לו נניח תמונה בגודל 100*100 ואומר לו להוציא את הטקסט שנמצא בין 10*10 לבין 30*30. נניח שהמשתמש לוחץ על התמונה במיקום 20*20. מתוך זה, אני צריך לגלות כי המילה שהוא לחץ עליה תחומה בין 10*10 לבין 30*30, ואז להעביר את הקורדינטות הנ"ל למנוע כדי לגלות את המילה עצמה. יש לציין כי בשאר התמונה יש לי עוד מילים אשר *אינן* מעניינות אותי!.
 

selalerer

New member
כאן כבר אתה תלוי בפורמט של התמונה.

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

hatulflezet

New member
אני הייתי מנסה

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

gilad_no

New member
תוכל להרחיב בבקשה?

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

hatulflezet

New member
להרחיב?

תשמע, זה נושא שלם... אבל, העקרונות פשוטים. אני מצרף לך שני לינקים, מהם תוכל להמשיך ולחפש. תחפש MORAVEC ו-EDGE DETCTION לינק1 לינק2 מקווה שזה עזר.
 
למעלה