আপনি প্রান্তগুলি খুঁজছেন না (= উচ্চ এবং নিম্ন ধূসর মানের প্রসারিত অঞ্চলের মধ্যে সীমানা), আপনি শিরাগুলি খুঁজছেন (পাতলা রেখাগুলি তাদের আশেপাশের চেয়ে গাer় বা উজ্জ্বল), তাই প্রান্ত ফিল্টারগুলি আদর্শ নাও হতে পারে: একটি প্রান্ত ফিল্টার হবে আপনাকে দুটি ফ্ল্যাঙ্ক দেবে (লাইনের প্রতিটি পাশে একটি) এবং লাইনের মাঝখানে একটি কম প্রতিক্রিয়া:
যোগ করুন : যদি একটি প্রান্ত ডিটেক্টর এবং একটি রিজ ডিটেক্টর এর মধ্যে পার্থক্যটি আরও স্পষ্টভাবে ব্যাখ্যা করতে বলা হয়। এই উত্তরটি যদি খুব দীর্ঘ হয় তবে আমি আগে থেকে ক্ষমা চাই।
একটি প্রান্ত সনাক্তকারী হ'ল (সাধারণত) প্রথম ডেরাইভেটিভ অপারেটর: আপনি যদি 3 ডি ল্যান্ডস্কেপ হিসাবে ইনপুট চিত্রটি কল্পনা করেন তবে একটি প্রান্ত সনাক্তকারী সেই ল্যান্ডস্কেপের প্রতিটি পয়েন্টে opeালটির খাড়াতা পরিমাপ করে:
আপনি যদি প্রসারিত উজ্জ্বল বা অন্ধকার অঞ্চলের সীমানা সনাক্ত করতে চান তবে এটি ঠিক আছে। তবে ওপি-র চিত্রের শিরাগুলির জন্য এটি আপনাকে একই রকম করবে: প্রতিটি শিরাটির বাম এবং ডানদিকে রূপরেখা:
এটি ক্যানি এজ ডিটেক্টর ফলাফলগুলিতে "ডাবল লাইনের প্যাটার্ন" ব্যাখ্যা করে:
তাহলে, আপনি কীভাবে এই পাতলা রেখাগুলি সনাক্ত করতে পারেন (অর্থাত্ রেডস)? ধারণাটি হ'ল পিক্সেল মানগুলি (স্থানীয়ভাবে) ২ য় অর্ডার বহুপদী দ্বারা সমান হতে পারে, অর্থাত্ যদি চিত্রের ফাংশনটি , তবে এবং এর ছোট মানগুলির জন্য :gxy
g(x,y)≈12x2∂2g∂x2+xy∂2g∂x∂y+12y2∂2g∂y2+x∂g∂x+y∂g∂y+g(0,0)
বা, ম্যাট্রিক্স আকারে:
g(x,y)≈12(xy).⎛⎝⎜∂2g∂x2∂2g∂x∂y∂2g∂x∂y∂2g∂y2⎞⎠⎟.(xy)+(xy).(∂g∂x∂g∂y)+g(0,0)
দ্বিতীয় ক্রমের ডেরাইভেটিভ ম্যাট্রিক্স বলা হয় " হেসিয়ান ম্যাট্রিক্স "। এটি আমাদের আগ্রহী ২ য় অর্ডার কাঠামো বর্ণনা করে।⎛⎝⎜∂2g∂x2∂2g∂x∂y∂2g∂x∂y∂2g∂y2⎞⎠⎟
এই ফাংশনের ২ য় অর্ডার অংশটি দুটি কোণে দ্বারা ঘোরানো দুটি প্যারোব্লাস যোগফলকে এর ডায়াগোনাল ম্যাট্রিক্সকে ঘূর্ণনের সময়ে উপরের দিকে হেসিয়ান ম্যাট্রিক্সকে ঘূর্ণন করে রূপান্তরিত করা যেতে পারে ( ম্যাট্রিক্স পচে যাওয়া ) আমরা ঘূর্ণন সম্পর্কে কোনও চিন্তা করি না (আমরা যে কোনও দিকনির্দেশে শ্যাওলা সনাক্ত করতে চাই), তাই আমরা কেবলমাত্র এবংλ1x2+λ2y2λ1λ2
এই ফাংশনটি প্রায় কী ধরণের আকার ধারণ করতে পারে? আসলে, অনেকগুলি না:
উপত্যকাগুলি সনাক্ত করতে, আমরা চিত্রের এমন অঞ্চলগুলি সন্ধান করতে চাই যা উপরের প্লটগুলির শেষের মতো দেখায়, তাই আমরা এমন অঞ্চলগুলি সন্ধান করছি যেখানে হেসিয়ানের প্রধান ইজানুয়ালু বৃহত্তর (গৌণ স্থানীয় স্থানের তুলনায়)। এটি সনাক্ত করার সহজ উপায় হ'ল প্রতিটি পিক্সেলের প্রধান ইগনুয়ালু গণনা করা - এবং এটি নীচে রিজ ফিল্টারটি করে।
একটি রিজ ফিল্টার সম্ভবত আরও ভাল ফলাফল দেবে। আমি RidgeFilter
আপনার চিত্রটিতে গাণিতিকের অন্তর্নির্মিত চেষ্টা করেছি (যা প্রতিটি পিক্সেলটিতে হেসিয়ান ম্যাট্রিক্সের প্রধান ইগনুয়ালু গণনা করে):
আপনি দেখতে পাচ্ছেন, প্রতিটি পাতলা অন্ধকার রেখার জন্য কেবল একটি একক শীর্ষ রয়েছে। বাইনারিাইজিং এবং কঙ্কালের ফলন:
কঙ্কাল ছাঁটাই এবং চিত্র থেকে ছোট উপাদান (শব্দ) সরিয়ে দেওয়ার পরে, আমি এই চূড়ান্ত কঙ্কালটি পেয়েছি:
সম্পূর্ণ গাণিতিক কোড:
ridges = RidgeFilter[ColorNegate@src];
skeleton = SkeletonTransform[Binarize[ridges, 0.007]];
DeleteSmallComponents[Pruning[skeleton, 50], 50]
যোগ করুন
আমি কোনও মতলব বিশেষজ্ঞ নই, এটির রিজ ফিল্টারটি অন্তর্নির্মিত কিনা তা আমি জানি না, তবে কীভাবে এটি "হাতে" প্রয়োগ করা যায় তা (আমি আবার মেটেম্যাটিকা ব্যবহার করে) আপনাকে দেখাতে পারি। যেমনটি আমি বলেছি, রিজ ফিল্টার হেসিয়ান ম্যাট্রিক্সের প্রধান ইগেনভ্যালু। ম্যাথমেটিকায় আমি প্রতীকীভাবে এই ইগেনুয়ালুটি গণনা করতে পারি:
eigenvalue=Last[Eigenvalues[(HxxHxyHxyHyy)]]
=>12(Hxx+Hyy+H2xx+4H2xy−2HxxHyy+H2yy−−−−−−−−−−−−−−−−−−−−−−−√)
সুতরাং আপনাকে যা করতে হবে তা হল দ্বিতীয় ডেরিভেটিভগুলি , , (গাউসীয় ফিল্টারটির উত্সাহিত বা ডেরিভেটিভ ব্যবহার করে) গণনা করা এবং সেগুলি সন্নিবেশ করানো উপরের অভিব্যক্তিটিতে, এবং আপনি আপনার রিজ ফিল্টার পেয়েছেন। এইচ XY এইচ yyHxxHxyHyy