आपकी "स्पाइकी ऑब्जेक्ट" की सीमाओं पर अधिक कोने हैं, इसलिए एक दृष्टिकोण इसके लिए एक कोने डिटेक्टर को ट्यून करना होगा ।
उदाहरण के लिए, मैंने एक दूरी-परिवर्तित छवि के संरचना टेंसर (नीचे गणित विषय) के निर्धारक की गणना की:
हिस्टैरिसीस के साथ Binarizing इस छवि को उत्पन्न करता है, जो आपकी पसंद के विभाजन एल्गोरिथ्म के लिए एक अच्छा प्रारंभिक बिंदु होना चाहिए:
Mathematica कोड ( src
आपके द्वारा पोस्ट की गई स्रोत छवि है)
सबसे पहले, मैं इनपुट छवि के एक दूरी परिवर्तन की गणना करता हूं। यह पूरे ऑब्जेक्ट क्षेत्र (केवल सीमा के बजाय) पर विरोधाभास बनाता है, इसलिए पूरे ऑब्जेक्ट का पता लगाया जा सकता है।
dist = ImageData[DistanceTransform[src]];
अगला मैं संरचना के घटकों को दसियों तैयार करता हूं । गाऊसी डेरिवेटिव के लिए फ़िल्टर आकार यदि 5, खिड़की का आकार 20 है।
gx = GaussianFilter[dist, 5, {1, 0}];
gy = GaussianFilter[dist, 5, {0, 1}];
gx2 = GaussianFilter[gx^2, 20];
gxy = GaussianFilter[gx*gy, 20];
gy2 = GaussianFilter[gy^2, 20];
प्रत्येक पिक्सेल पर कोने के फिल्टर की गणना करने के लिए, मैं बस इन्हें संरचना के सांकेतिक निर्धारक में प्लग करता हूं:
corners = Det[{{dx2, dxy}, {dxy, dy2}}] /. {dx2 -> gx2, dxy -> gxy, dy2 -> gy2};
जो मूल रूप से समान है:
corners = gx2 * gy2 - gxy * gxy;
इसे एक छवि में बदलने और इसे 0..1 सीमा तक स्केल करने से ऊपर के कोने डिटेक्टर छवि मिलती है।
अंत में, दाहिनी दहलीज के साथ इसे द्विअर्थी करने से अंतिम, द्विआधारी छवि मिलती है:
MorphologicalBinarize[Image[corners], {0.025, 0.1}]