দক্ষতার সাথে ফিগার রোটেশন কীভাবে গণনা করবেন?


13

ছবি ঘ ছবি 2

আমার কাছে একটি চিত্র রয়েছে যা বাইটস (বিটম্যাপের মতো ম্যাট্রিক্স) এর ম্যাট্রিক্সের মাধ্যমে উপস্থাপিত হয়। উদাহরণ চিত্র প্রদর্শিত হয় Picture 1

লক্ষ্যটি হ'ল কিছু প্রদত্ত চিত্রের সেরা ঘূর্ণন কোণ খুঁজে পাওয়া । চিত্রটি যখন সর্বোত্তম কোণে ঘোরানো হয়, তখন আয়তক্ষেত্রটি যা এক্স এবং ওয়াই অক্ষের সমান্তরাল এবং চিত্রটি ছোট আকারের থাকে।

চিত্রটি নথিভুক্ত আয়তক্ষেত্রগুলিকে ছবিগুলিতে হালকা-ধূসর দেখানো হয়েছে। এর মধ্যে Picture 2আপনি দেখতে পাচ্ছেন যে চিত্রটির আদর্শ ঘূর্ণনটি প্রায় 30 ডিগ্রি ঘড়ির কাঁটার দিকে।

এখন, আমি এই কোণটি কীভাবে সন্ধান করব তা আমি অ্যালগরিদম জানি, তবে এটি আমার কাছে মনে হয় এটি অত্যন্ত অদক্ষ। এটা এইভাবেই চলে:

  1. 0 থেকে 45 পর্যন্ত কোণে লুপ করুন।
  2. বর্তমান কোণে, প্রতিটি চিত্র পয়েন্টের জন্য নতুন, ঘোরানো, অবস্থান গণনা করুন
  3. আয়তক্ষেত্রের সীমানা সন্ধান করুন যাতে ফিগার রয়েছে (সর্বনিম্ন এবং সর্বাধিক x, y) এবং এখন অবধি সেরা ম্যাচ হলে এটি নিবন্ধ করুন
  4. পরবর্তী কোণ

এটি এক ধরণের হিংস্র শক্তি পদ্ধতি এবং ছোট পরিসংখ্যানগুলির জন্য ভাল এবং যুক্তিসঙ্গত দ্রুত কাজ করে। তবে, আমার 10 মিলিয়ন পয়েন্ট পর্যন্ত পরিসংখ্যানগুলি নিয়ে কাজ করা দরকার এবং আমার অ্যালগোরিদম ধীর হয়ে যায়।

এই সমস্যার জন্য ভাল অ্যালগরিদম কি হতে পারে?

উত্তর:


20

দেখে মনে হচ্ছে আপনি লিনিয়ার সময় ঘুরতে ক্যালিপার্স অ্যালগোরিদম ব্যবহার করে নির্বিচারে বিন্যস্ত ন্যূনতম বাউন্ডিং বাক্সটি খুঁজে পেতে পারেন ।

একবার আপনার কাছে বাউন্ডিং বাক্স পরে, আপনাকে কেবল কোনও পক্ষের slাল গণনা করে ঘূর্ণনের কোণ নির্ধারণ করতে হবে।


এটি একটি দুর্দান্ত সমাধান, খুব ভাল একটি।
অবহিত

দুর্দান্ত, যেহেতু আমি ইতিমধ্যে x এবং y দ্বারা পয়েন্টগুলি বাছাই করেছি, আমি এই en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/… দিয়ে উত্তল হাল খুঁজে পেতে পারি এবং হাল পয়েন্ট সহ বিদ্যমান অ্যালগরিদম ব্যবহার করতে পারি।
দুসান

12

আপনার পদ্ধতির প্রথম ধাপ ত্রুটিপূর্ণ হয় - অসীম সংখ্যা আছে বাস্তব 0 এবং 45 মধ্যে মান তাই এটি "তাদের মাধ্যমে লুপ" করার কোন জ্ঞান করে তোলে। তবে আপনার অ্যালগরিদমটি মেরামত করা যেতে পারে:

  • বহুভুজের উত্তল হাল সন্ধান করুন

  • উত্তল হলের বাইরের প্রান্ত দ্বারা প্রদত্ত সীমাবদ্ধ (!) সংখ্যাটি দিয়ে লুপ করুন

  • এখন এই কোণগুলি ব্যবহার করে 2 থেকে 4 পদক্ষেপগুলি প্রয়োগ করুন।

এটি কাজ করে কারণ এটি দেখানো যেতে পারে যে ন্যূনতম সংলগ্ন আয়তক্ষেত্রটি উত্তল হলের বাইরের প্রান্তগুলির একটি স্পর্শ করে।


হ্যাঁ, আমি ঠিক তাই করতে যাচ্ছি, ইতিমধ্যে ড্যানের উত্তরটির বুদ্ধিমানের সাহায্য পেয়েছি। ধন্যবাদ.
দুসান

@ দুসান: আমি নিশ্চিত নই যে অন্য উত্তরগুলি একই পদ্ধতির বর্ণনা দিয়েছে, সুতরাং আমি সমাধানটি সহজ উপায়ে বর্ণনা করার চেষ্টা করেছি, আশা করি কিছুটা পরিষ্কার হয়ে গেল। এখানে একটি বিবরণ পাওয়া গেছে: cgm.cs.mcgill.ca/~orm/maer.html
ডক ব্রাউন

হ্যাঁ, আপনি ঠিক বলেছেন, আপনার দৃষ্টিভঙ্গি অনেক বেশি দৃ concrete় এবং সরল এবং পরিষ্কার but তবে ড্যানের উত্তরে প্রদত্ত ইঙ্গিত দিয়ে আমি একই পন্থাটি নিজেই শেষ করেছি, তাই আমি তাকে একটি গ্রহণযোগ্যতা দিয়েছি। আশা করি আপনার উত্তরটি আরও অনেক বেশি ভোট অর্জন করবে। কঠোরানুভুতি নেই. চিয়ার্স!
দুসান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.