আপনার উভয় ছবিতে এমন অনেকগুলি লাইন রয়েছে যা আপনি সাইন করে যাচ্ছেন তার সাথে কিছুই করার নেই। এবং সেই লাইনের কয়েকটি লম্বা / আপনি প্রকৃত লাইনের তুলনায় উচ্চতর বিপরীতে রয়েছে, তাই আমি মনে করি প্রান্তরেখাগুলি সনাক্তকরণ (উদাহরণস্বরূপ হুফ ট্রান্সফর্ম ব্যবহার করে বা অনুভূমিকভাবে / উল্লম্বভাবে বিপরীতে সংযোজন করে) কাজ করবে না।
তবে: আপনি যে চিহ্নটি সন্ধান করছেন তাতে অন্যান্য বৈশিষ্ট্য রয়েছে যা সনাক্ত করা সহজ হওয়া উচিত:
- সেখানে সাইন ব্যাকগ্রাউন্ডে (প্রায়) ধ্রুব উজ্জ্বলতা রয়েছে
- এটি চিত্রের তুলনামূলকভাবে বড় অঞ্চল নেয়
- এটি চিত্রের কেন্দ্রের কাছে
সুতরাং আপনি কম বিপরীতে একটি বৃহত সংযুক্ত অঞ্চল সন্ধান করছেন। আমি ম্যাথমেটিকায় একটি প্রুফ অফ কনসেপ্ট অ্যালগরিদম হ্যাক করেছি। (আমি কোনও ওপেনসিভি বিশেষজ্ঞ নই, তবে আমি যখন সেগুলি জানি তখন আমি সম্পর্কিত ওপেনসিভি ফাংশনটি উল্লেখ করব))
প্রথমত, আমি প্রতিটি পিক্সেলটিতে গ্রেডিয়েন্ট বিস্তৃতি সনাক্ত করতে গসিয়ান ডেরিভেটিভ ফিল্টার ব্যবহার করি। গাউসিয়ান ডেরিভেটিভ ফিল্টারটির বিস্তৃত অ্যাপারচার রয়েছে (এই ক্ষেত্রে 11x11 পিক্সেল), সুতরাং এটি খুব শব্দ-সংবেদনশীল। আমি তারপরে গ্রেডিয়েন্ট চিত্রটিকে 1 = মানে বোঝায় তাই আমি উভয় নমুনার জন্য একই প্রান্তিকতা ব্যবহার করতে পারি।
src = Import["http://www.freeimagehosting.net/uploads/720da20080.jpg"];
pixels = ImageData[ColorConvert[src, "Grayscale"]];
gradient = Sqrt[GaussianFilter[pixels, 5, {1, 0}]^2 + GaussianFilter[pixels, 5, {0, 1}]^2];
gradient = gradient/Mean[Flatten[gradient]];
ওপেনসিভি বাস্তবায়ন: আপনি sepFilter2D
প্রকৃত ফিল্টারিংয়ের জন্য ব্যবহার করতে পারেন , তবে দৃশ্যত আপনাকে ফিল্টার কার্নেলকে নিজের মূল্য নির্ধারণ করতে হবে ।
ফলাফলটি এরকম দেখাচ্ছে:
এই চিত্রটিতে, সাইন ব্যাকগ্রাউন্ডটি অন্ধকার এবং সাইন বর্ডারটি উজ্জ্বল। সুতরাং আমি এই চিত্রটি বাইনারি করতে এবং অন্ধকার সংযুক্ত উপাদানগুলির সন্ধান করতে পারি।
binaryBorders = Binarize[Image[gradient], 0.2];
sign = DeleteBorderComponents@ColorNegate[binaryBorders];
largestComponent = SortBy[ComponentMeasurements[sign, {"Area", "ConvexVertices"}][[All, 2]], First][[-1, 2]];
ওপেনসিভি বাস্তবায়ন: থ্রোসোল্ডিংটি সোজা হওয়া উচিত, তবে আমি মনে করি ওপেনসিভিতে সংযুক্ত উপাদান বিশ্লেষণ নেই - আপনি এটির জন্য বন্যা ভরাট বা সিভিব্লবস লিব ব্যবহার করতে পারেন।
এখন, কেবল চিত্রের কেন্দ্রের নিকটে সবচেয়ে বড় ব্লবটি সন্ধান করুন এবং উত্তল হলের সন্ধান করুন (আমি কেবল সবচেয়ে বড় ব্লবটি ব্যবহার করেছি যা ব্যাকগ্রাউন্ডের সাথে সংযুক্ত নয়, তবে এটি প্রতিটি চিত্রের জন্য যথেষ্ট নাও হতে পারে)।
ফলাফল: