ImageMagick के साथ बाहरी खाली स्थान ट्रिम करना स्कैन किए गए दस्तावेज़ों पर काम नहीं करता है


4

एक ऐसी छवि को देखते हुए, जिसके अंदर कुछ वास्तविक सामग्री है और आमतौर पर इसके आसपास कुछ अवांछित सफेद या काला या पारदर्शिता है, मैं ImageMagick का उपयोग करके बाहरी भागों को ट्रिम या क्रॉप करना चाहूंगा।

निम्न छवि को कंप्यूटर पर (HTML पर) डिजिटल रूप से खींचा गया है <canvas> ):

canvas.png

निम्नलिखित ImageMagick कमांड है जो मैंने कोशिश की है:

$ convert canvas.png -trim +repage canvas_trimmed.png

और यह पूरी तरह से काम किया:

canvas_trimmed.png

तो ठीक यही मैं चाहता हूं। लेकिन अब मैं चाहता हूं कि यह स्कैन किए गए दस्तावेजों के साथ भी काम करे, जो कि कंप्यूटर-जनरेटेड इमेज के रूप में "परफेक्ट" नहीं हैं, यानी उनके पास "व्हाइट" और "ब्लैक" के अधिक शेड हैं और कोई पारदर्शिता नहीं है, जो पता लगाना आसान होगा। कभी-कभी, उनके पास कागज़ की सफ़ेद पृष्ठभूमि के आस-पास कुछ काली पट्टियाँ भी होती हैं क्योंकि स्कैनर का क्षेत्रफल कागज से बड़ा होता है:

scan.jpg

इस छवि के साथ, मैंने दिए गए आदेश में निम्नलिखित आदेशों की कोशिश की, प्रत्येक अधिक आक्रामक होने की कोशिश कर रहा है, लेकिन कोई भी परिणाम नहीं दे रहा है - आप मूल छवि और "छंटनी" छवियों के बीच कोई अंतर नहीं देख सकते हैं, अर्थात ट्रिमिंग या क्रॉपिंग। बिल्कुल काम नहीं करता है:

$ convert scan.jpg -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 10% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor white -border 1x1 -trim +repage scan_trimmed.jpg
$ convert scan.jpg -fuzz 60% -bordercolor black -border 1x1 -trim +repage scan_trimmed.jpg

मुझसे यहां क्या गलत हो रहा है? ImageMagick कमांड कंप्यूटर की जनरेट की गई छवियों को कैसे बदल सकता है ताकि इसे संशोधित किया जा सके ताकि यह स्टाइल के दस्तावेज़ों को विश्वसनीय तरीके से स्कैन कर सके?


यदि आप अपनी स्कैन की गई छवि को देखते हैं, तो पक्षों में स्पष्ट रूप से कुछ गैर-सफेद क्षेत्र हैं। ImageMagick का अर्थ है कि इसमें अभी भी सामग्री है यह ट्रिम नहीं कर सकता क्योंकि छवि में अभी भी सामग्री है। कोई आसान उपाय मुझे नहीं पता।
JakeGould

क्यों उलझी बातें? अपने स्कैनर ड्राइवर में ऑटो-फसल फ़ंक्शन का उपयोग करें और आप कर रहे हैं। कुछ स्कैनर ड्राइवर भी अंधेरे किनारों को हटाने की पेशकश करते हैं जैसा कि आपके स्कैन किए गए उदाहरण पर दिखाया गया है। शायद ImageMagick इस तरह के एक अंधेरे किनारों को हटाने की पेशकश करता है।
user291737

@ user291737 धन्यवाद! काश ऐसा संभव होता, लेकिन ऐसा नहीं है। कुछ उपयोग मामलों की कल्पना करना आसान है, जहां यह संभव नहीं है: आपका स्कैनर उस सुविधा का समर्थन नहीं कर सकता है, आप किसी और के लिए प्रसंस्करण कर रहे होंगे (जिन्होंने अपने स्कैनर का उपयोग किया था, जिसकी आपके पास पहुंच नहीं है, आदि)।
caw

1
कैसे के साथ संभावित परीक्षण के बारे में -shave और देखें कि क्या आप सरल हो सकते हैं हजामत किनारों से और फिर आपके द्वारा उपयोग किए जाने वाले तर्क का उपयोग करें? मुझे पता है अगर यह मदद करता है, लेकिन देखो दोनों मौका मिलने पर ये लिंक
Pimp Juice IT

फ्रेड की ImageMagick लिपियों पर एक नज़र है autotrim तथा multicrop । यह देखो संबंधित लेख
harrymc

जवाबों:


4

आप उपयोग कर सकते हैं -shave और बस हजामत किनारों को बंद करें और फिर उस तर्क का उपयोग करें जिसे आप बाद में प्रक्रिया के अनुसार उपयोग करते हैं।

ध्यान दें: राशि आप हजामत ऑफ (जैसे)   "-शव" के बाद तर्क 40x40 या 10x10इत्यादि) इसलिए महत्वपूर्ण है   यह सुनिश्चित करने के लिए पूरी तरह से परीक्षण करना सुनिश्चित करें कि यह सेटिंग सार्वभौमिक रूप से काम करती है   आपके चित्रों के लिए आपका वातावरण।

उदाहरण तर्क

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 40x40 C:\Folder\ShavedCircle.jpg
<The rest of your logic against C:\Folder\ShavedCircle.jpg now>

से पहले

enter image description here

बाद

enter image description here


आगे के संसाधन

  • एक छवि से किनारों को हटाने, दाढ़ी

    "-बॉर्डर" या "-फ्रेम" ऑपरेटरों के पीछे, है   " -shave ",   जो अगर एक ही तर्क दिया जाता है, द्वारा जोड़ा गया स्थान हटा देगा   ये आज्ञाएँ।

    इन तीन ऑपरेटरों के बारे में ध्यान रखने वाली मुख्य बात यह है कि   वे छवियों के विपरीत पक्षों पर जगह जोड़ते हैं और हटाते हैं, न कि सिर्फ   एक तरफ, या बगल के किनारे।

    यदि आप किसी छवि के केवल एक किनारे को हटाना चाहते हैं, तो आपको इसकी आवश्यकता होगी   इसके बजाय "-chop" ऑपरेटर का उपयोग करें। (नीचे चोप उदाहरण देखें)।

    जैसा कि सभी ऑपरेटरों से पहले "-बॉर्डर", "-फ्रेम", और   " -shave ",   केवल आभासी कैनवास पर वास्तविक छवि को प्रभावित करें और आभासी को नहीं   कैनवास ही।

    स्रोत


इसके लिए धन्यवाद! अच्छी तरह से -shave विकल्प ठीक काम करता है, कम से कम ऐसा प्रतीत होता है। मुझे वह विकल्प नहीं पता था (किसी तरह हमेशा इसे अनदेखा किया गया) और यह किनारों के लिए काफी मददगार है। जैसे कुछ का उपयोग करना -shave 90x90 नमूना छवि के लिए, सभी किनारे चले गए हैं। परंतु किनारों की समस्या कभी नहीं रही। यहां तक ​​कि उन्हें पूरी तरह से हटाने के बाद भी, और यहां तक ​​कि उदार सेटिंग्स के साथ भी -fuzz 80%ऊपरी सफेद भाग केवल हटा दिया जाता है, अगर बिल्कुल भी। ऐसा लगता है कि स्कैनर द्वारा उत्पन्न सफेद क्षेत्रों में कुछ "गंदगी" है, जो रोकता है -trim काम करने से। शायद कोई बेहतर उपाय नहीं है, हालांकि।
caw

वास्तव में अभी तक निश्चित नहीं है क्योंकि यह वास्तव में समस्या को ठीक नहीं करता है या पूर्ण प्रश्न का उत्तर नहीं देता है, लेकिन सिर्फ इसका एक हिस्सा संबोधित किया है। वैसे भी, मैं इनाम (+100) पहले ही दे चुका हूं।
caw

यह वास्तव में उस प्रश्न से छवि को ठीक करता है, जिसके साथ मैं काम कर रहा हूं: i.stack.imgur.com/yVhlM.jpg मैंने उस छवि के साथ सभी कमांड और विकल्प आज़माए। मेरे लिए काम नहीं करता है।
caw

एक बार फिर धन्यवाद! आपके दूसरे उत्तर के साथ, यह वास्तव में पूरी तरह से काम करता है।
caw

2

ImageMagick के साथ चित्रों से गंदगी Specks या शोर निकालें

नीचे मैं अपने प्रश्न में छवि से छवि फ़ाइल में गंदगी specks से छुटकारा पाने के लिए इस्तेमाल किया है, लेकिन मैं आगे चला गया और इस्तेमाल किया हजामत उसके साथ 90x90 पहले जो आपने पुष्टि की है वह समस्या को उस दूसरे समाधान से हल करने में मदद करता है जो मैंने सम्मानित बाउंटी के लिए प्रदान किया था।

उदाहरण तर्क

@ECHO ON

SET Convert="C:\Program Files\ImageMagick\Convert.exe"
%convert% C:\Folder\Circle.jpg -shave 90x90 C:\Folder\ShavedCircle.jpg
%convert% C:\Folder\ShavedCircle.jpg -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
C:\Folder\cleaned.jpg

से पहले

enter image description here

बाद

enter image description here


बजने वाले शोर की प्रकृति के कारण, सभी काले शोर specks हैं   अक्षरों से कम से कम 1 पिक्सेल अलग।

इस शोर को हटाने के लिए एक अच्छा तरीका यह होगा कि छवि को पतला किया जाए   प्रत्येक अक्षर का कम से कम एक "बीज" हिस्सा रहता है, फिर इनको मिटा दें   एक मुखौटा के रूप में मूल छवि का उपयोग करते समय बीज; वास्तव में एक बाढ़-भराव   प्रत्येक अक्षर के लिए।

इस तरह अक्षरों और अन्य बड़े ब्लब्स के आकार को संरक्षित किया जाता है   पूरी तरह से, और छोटे सूजन गायब हो जाते हैं।

सबसे बड़ा पतला जो अभी भी प्रत्येक अक्षर आकृति का एक हिस्सा छोड़ देता है लगता है   उदाहरण डेटा के लिए 3x4 आयत बनना; शायद कुछ का उपयोग करें   सुरक्षित पक्ष पर होने के लिए छोटा है।

यह आदेश पहले 3x4 आयत को पतला करता है, अंत में तब तक मिटता है   पत्र पूरे फिर से हैं

कोड

convert cleanup.tif -write MPR:source ^
  -morphology close rectangle:3x4 ^
  -morphology erode square    MPR:source -compose Lighten -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  -morphology erode square    MPR:source -composite ^
  cleaned.png

स्रोत


आगे के संसाधन


दूसरे कमांड से पहले ऐसा करना ( -trim ) सफाई करता है और छवि को वांछित के रूप में ट्रिम करता है। आपका बहुत बहुत धन्यवाद!
caw

1

मूल प्रश्न में दिखाए गए मेरे विशिष्ट उदाहरण के लिए कम से कम आखिर में क्या सही परिणाम प्रदान किए गए ( scan.jpg ), निम्नलिखित दो-चरण समाधान था:

convert \
    scan.jpg \
    -write MPR:source \
    -morphology close rectangle:3x4 \
    -clip-mask MPR:source \
    -morphology erode:8 square \
    +clip-mask \
    scan_intermediate.jpg

convert scan_intermediate.jpg -shave 40x40 -fuzz 10% -trim +repage scan_final.jpg

यह समाधान तीन भागों से बना है:

  1. मेरे मूल प्रश्न से आज्ञा
  2. शोर हटाने में दिखाया गया यह जवाब
  3. -shave ऑपरेटर ने सुझाव दिया यह जवाब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.