আমি ভায়োলা-জোনসের মুখ সনাক্তকরণ অ্যালগরিদমের একটি অভিযোজন বাস্তবায়ন করছি । কৌশলটি কোনও চিত্রের মধ্যে 24x24 পিক্সেলের একটি সাবফ্রেম স্থাপনের উপর নির্ভর করে এবং পরবর্তী সময়ে প্রতিটি আকারের সাথে এটির প্রতিটি অবস্থানে আয়তক্ষেত্রাকার বৈশিষ্ট্যগুলি রাখে।
এই বৈশিষ্ট্যগুলিতে দুটি, তিন বা চারটি আয়তক্ষেত্র থাকতে পারে। নিম্নলিখিত উদাহরণ উপস্থাপন করা হয়।
তারা দাবি করে যে সম্পূর্ণ সেট 180k এর বেশি (বিভাগ 2):
ডিটেক্টরের বেস রেজোলিউশনটি 24x24 বলে দেওয়া হয়েছে, আয়তক্ষেত্রের বৈশিষ্ট্যগুলির সম্পূর্ণ সেটটি 180,000 এরও বেশি is নোট করুন যে হার ভিত্তির বিপরীতে, আয়তক্ষেত্রের বৈশিষ্ট্যগুলির সেটটি অসম্পূর্ণ।
নিম্নলিখিত বিবৃতিগুলি কাগজে স্পষ্টভাবে বলা হয়নি, সুতরাং সেগুলি আমার পক্ষ থেকে অনুমান:
- এখানে কেবল দুটি দ্বি-আয়তক্ষেত্র বৈশিষ্ট্য, 2 তিনটি আয়তক্ষেত্র বৈশিষ্ট্য এবং 1 চার-আয়তক্ষেত্র বৈশিষ্ট্য রয়েছে। এর পিছনে যুক্তিটি হ'ল আমরা হাইলাইট করা আয়তক্ষেত্রগুলির মধ্যে পার্থক্য পর্যবেক্ষণ করছি , বর্ণ বা আলোকসজ্জা বা এই ধরণের কোনও কিছুর স্পষ্টভাবে নয়।
- আমরা বৈশিষ্ট্য প্রকার A কে 1x1 পিক্সেল ব্লক হিসাবে সংজ্ঞায়িত করতে পারি না; এটি কমপক্ষে কমপক্ষে 1x2 পিক্সেল হওয়া উচিত। এছাড়াও, টাইপ ডি অবশ্যই কমপক্ষে 2x2 পিক্সেল হতে হবে এবং এই বিধিটি অন্যান্য বৈশিষ্ট্য অনুসারে ধারণ করে।
- মিডিল পিক্সেলটি পার্টিশন করা যায় না বলে আমরা বৈশিষ্ট্য প্রকার A কে 1x3 পিক্সেল ব্লক হিসাবে সংজ্ঞায়িত করতে পারি না এবং এটিকে নিজের থেকে বিয়োগ করা 1x2 পিক্সেল ব্লকের অনুরূপ; এই বৈশিষ্ট্যটির প্রকারটি কেবলমাত্র প্রস্থের জন্যই সংজ্ঞায়িত। এছাড়াও, বৈশিষ্ট্য টাইপ সি এর প্রস্থ অবশ্যই 3 দ্বারা বিভাজ্য হতে হবে এবং এই বিধিটি অন্যান্য বৈশিষ্ট্য অনুসারে ধারণ করে।
- প্রস্থ এবং / অথবা উচ্চতার সাথে 0 এর বৈশিষ্ট্যটি সংজ্ঞায়িত করতে পারি না Therefore সুতরাং, আমরা বৈশিষ্ট্যটির আকার x এবং y থেকে 24 মাইনাসে পুনরাবৃত্তি করি ।
এই অনুমানের উপর ভিত্তি করে, আমি সম্পূর্ণ সেটটি গণনা করেছি:
const int frameSize = 24;
const int features = 5;
// All five feature types:
const int feature[features][2] = {{2,1}, {1,2}, {3,1}, {1,3}, {2,2}};
int count = 0;
// Each feature:
for (int i = 0; i < features; i++) {
int sizeX = feature[i][0];
int sizeY = feature[i][1];
// Each position:
for (int x = 0; x <= frameSize-sizeX; x++) {
for (int y = 0; y <= frameSize-sizeY; y++) {
// Each size fitting within the frameSize:
for (int width = sizeX; width <= frameSize-x; width+=sizeX) {
for (int height = sizeY; height <= frameSize-y; height+=sizeY) {
count++;
}
}
}
}
}
ফলাফল 162,336 ।
"180,000 এরও বেশি" ভায়োলা অ্যান্ড জোন্স যে কথা বলেছিল তার প্রায় একটাই উপায়, আমি অনুমান # 4 বাদ দিচ্ছি এবং কোডটিতে বাগগুলি প্রবর্তন করে। এর মধ্যে যথাক্রমে চারটি লাইন পরিবর্তন করা জড়িত:
for (int width = 0; width < frameSize-x; width+=sizeX)
for (int height = 0; height < frameSize-y; height+=sizeY)
ফলাফলটি তখন 180,625 । (দ্রষ্টব্য যে এটি সাবফ্র্যামের ডান এবং / অথবা নীচে স্পর্শ করা থেকে বৈশিষ্ট্যগুলিকে কার্যকরভাবে প্রতিরোধ করবে))
এখন অবশ্যই প্রশ্ন: তারা কি তাদের বাস্তবায়নে ভুল করেছে? শূন্যের উপরিভাগ সহ বৈশিষ্ট্যগুলি বিবেচনা করা কি কোনও অর্থবোধ করে? নাকি আমি এটিকে ভুল উপায়ে দেখছি?