চিত্র মোজাইক তৈরির জন্য অ্যালগরিদম - এর চেয়ে দ্রুততর কোনও উপায় আছে কি?


9

আমি ইমেজ মোজাইক তৈরি করে খেলছি। আমার স্ক্রিপ্টটি প্রচুর পরিমাণে চিত্র নিয়ে যায়, থাম্বনেইল আকারে এগুলিকে স্কেল করে এবং তারপরে একটি টার্গেট ইমেজ আনুমানিক করতে টাইল হিসাবে তাদের ব্যবহার করে।

পদ্ধতির আসলে বেশ আনন্দদায়ক:

আমি প্রতিটি টাইল অবস্থানের প্রতিটি থাম্বের জন্য গড় স্কোয়ার ত্রুটিটি গণনা করি।

প্রথমে আমি কেবল একটি লোভী প্লেসমেন্টটি ব্যবহার করেছি: টাইলটি সবচেয়ে ভাল যে টাইলটি সবচেয়ে ভাল ফিট করে তাতে কমপক্ষে ত্রুটিটি রেখে দিন এবং তারপরে এবং আরও অনেক কিছু।

লোভীর সমস্যা হ'ল এটি আপনাকে শেষ পর্যন্ত সবচেয়ে আলাদা থাম্বগুলি সর্বনিম্ন জনপ্রিয় টাইলগুলিতে রেখে দেয়, যদিও তারা ঘনিষ্ঠভাবে মেলে কিনা। আমি এখানে উদাহরণগুলি দেখাই: http://williamedwardscoder.tumblr.com/post/84505278488/making-image-mosaics

সুতরাং আমি স্ক্রিপ্ট বিঘ্নিত না হওয়া পর্যন্ত এলোমেলোভাবে অদলবদল করি। ফলাফলগুলি বেশ ঠিক আছে।

দুটি টাইলের এলোমেলো অদলবদল সবসময় উন্নতি হয় না, তবে কখনও কখনও তিন বা ততোধিক টাইলের আবর্তনের ফলে বিশ্বব্যাপী উন্নতি হয় অর্থাৎ উন্নতি হয় A <-> Bনা, তবে A -> B -> C -> A1হতে পারে ..

এই কারণে, দুটি এলোমেলো টাইলস বাছাই করার পরে এবং তারা উন্নতি করে না আবিষ্কার করার পরে, আমি মূল্যায়নের জন্য একগুচ্ছ টাইল বেছে নিই যে তারা এ জাতীয় ঘূর্ণনের তৃতীয় টাইল হতে পারে কিনা। চারটি টাইলের কোনও সেট লাভজনকভাবে ঘোরানো যেতে পারে এবং এগুলিও অনুসন্ধান করি না; তাড়াতাড়ি সুপার ব্যয়বহুল বাস্তব হতে চাই।

তবে এই সময় লাগে .. অনেক সময়!

একটি ভাল এবং দ্রুত পদ্ধতির আছে?


অনুগ্রহ আপডেট

আমি হাঙ্গেরীয় পদ্ধতির পাইথনের বিভিন্ন বাস্তবায়ন এবং বাইন্ডিং পরীক্ষা করেছিলাম ।

এতদূর দ্রুততমটি ছিল খাঁটি-পাইথন https://github.com/xtof-durr/makeSimple/blob/master/Munkres/kuhnMunkres.py

আমার কুণ্ডলীটি এটি সর্বোত্তম উত্তরটির সান্নিধ্যযুক্ত; যখন কোনও পরীক্ষার ছবিতে চালিত হয়, অন্যান্য সমস্ত গ্রন্থাগারগুলি ফলাফলের সাথে একমত হয়েছিল তবে এই kuhnMunkres.py, যখন তীব্রতার আদেশ দ্রুত হওয়া সত্ত্বেও অন্যান্য বাস্তবায়নগুলি সম্মত স্কোরের খুব খুব কাছাকাছি পৌঁছেছিল।

গতিটি খুব ডেটা-নির্ভর; মোনা লিসা 13 মিনিটের মধ্যে কুহনমুনক্রেস.পি-এর মাধ্যমে ছুটে এসেছিলেন, তবে স্কারলেট চেস্টেড পারাকিট 16 মিনিট সময় নিয়েছিল।

পরকীতের জন্য ফলাফলগুলি এলোমেলো অদলবদল এবং আবর্তনের মতো অনেকটাই ছিল:

এখানে চিত্র বর্ণনা লিখুনএখানে চিত্র বর্ণনা লিখুন

(বামদিকে kuhnMunkres.py, ডানদিকে এলোমেলো অদলবদল; তুলনার জন্য মূল চিত্র )

যাইহোক, আমি পরীক্ষিত মোনা লিসা চিত্রের জন্য, ফলাফলগুলি লক্ষণীয়ভাবে উন্নত হয়েছিল এবং তিনি আসলে তার সংজ্ঞায়িত 'হাসি' দিয়ে জ্বলজ্বল করেছিলেন:

এখানে চিত্র বর্ণনা লিখুনএখানে চিত্র বর্ণনা লিখুন

(বামদিকে kuhnMunkres.py, ডানদিকে এলোমেলো অদলবদল)


1
সংশ্লিষ্ট ... পর। কোডগল্ফ তালুতে রূপান্তর একই ধরণের সমস্যা ছিল।

1
এবং চিত্রগুলির আরেকটি সম্পর্কিত সেট অলআরজিবি যেখানে প্রতিটি চিত্র (যদিও এটি আপনাকে কীভাবে করতে হবে তার একটি ইঙ্গিত খুব বেশি দেয় না ... কেবল এই সমস্যাটির সাথে যোগাযোগ করা হয়েছে এমন আরও একটি অঞ্চল রয়েছে)।

1
বেশ কয়েক বছর আগে মোজাইক প্রস্তুতকারকের সাথে আমি এই সমস্যায় পড়েছিলাম। আমার তত্ক্ষণাত এবং এখনই যুক্তি হ'ল সমস্যাটি আপনার অ্যালগরিদম (এমএসই অংশ) নিয়ে নয় বরং আপনার ইনপুট চিত্র প্যালেটের সীমিত আকারের সাথে। কাজ করার জন্য এক বিলিয়ন চিত্র না থাকার কারণে আমি কিছু সময়ের পরে কোনও চিত্র পুনরায় ব্যবহার করার অনুমতি দিয়ে এটিকে নকল করেছি। তবে, আপনি যদি নিজের পদ্ধতির সাথে রাখতে চান তবে "ভাল" ফিটগুলির জন্য প্রথম পাসটি করা ভাল হতে পারে এবং তারপরে বাকী চিত্রগুলি এলোমেলো (বা র্যান্ডম-ইশ) হিসাবে বিবেচনা করা যায় - আপনার কেবলমাত্র সীমিত ইনপুট সেট দিয়ে অনেক পছন্দ।
জে ট্রানা 5

@ মিশেলটি এই দুর্দান্ত লিঙ্কটির জন্য ধন্যবাদ :) কোডগল্ফ বিশেষত আকর্ষণীয়। আমি খুঁজে পেয়েছি যে ভোট দেওয়া সেরা সমাধানগুলি এলোমেলো অদলবদল (এলোমেলো রোটেশন নয়) ব্যবহার করছে এবং সম্ভবত বেশ কিছুক্ষণ চলবে ...
উইল

1
আপনি একটি উত্তর নির্বাচন করে একটি অনুগ্রহ প্রদানের পরে এটি আসছেন। এটিকে সিমুলেটেড অ্যানিলিং সমস্যা হিসাবে বিবেচনা করার জন্য একটি ভিন্ন পদ্ধতির বিকল্প হবে । আপনি আপনার সমাধান পাইপলাইনের এক পর্যায়ে এসএ ব্যবহার করতে পারেন।
andy256

উত্তর:


3

হ্যাঁ, দুটি আরও ভাল এবং দ্রুত পদ্ধতির রয়েছে।

  • সহজ সমস্যা: প্রতিটি টাইলের জন্য, সেরা থাম্ব বেছে নিন (সম্ভাব্য নকল সহ)। ঠিক আছে, এটি প্রতারণা করছে তবে এটি কেবল আরও ভাল ফলাফলের দিকে নিয়ে যেতে পারে।
  • আপনার গ্রহণটি অ্যালগরিদমিকভাবে আরও আকর্ষণীয়, এবং এমএসই গ্রহণ করে ম্যাচের ব্যয় হিসাবে আপনার যোগফল অবশ্যই ন্যূনতম হওয়া উচিত বলে ধরে নিয়ে "লিনিয়ার অ্যাসাইনমেন্ট সমস্যা" হয়ে যায়। যেমন "হাঙ্গেরিয়ান পদ্ধতি" এর মাধ্যমে বহুবিধ সময়ে এ জাতীয় সমস্যা সমাধান করা যেতে পারে

তারপরে, আপনি অন্তর্নিহিত অ্যালগরিদম পরিবর্তন না করে এমএসইকে আরও চাক্ষুষভাবে সঠিক দূরত্বে প্রতিস্থাপন করে আপনার ব্যয়গুলি সামঞ্জস্য করতে পারেন।


ধন্যবাদ! এলএপি এবং হাঙ্গেরিয়ান পদ্ধতিটি আমার প্রয়োজনীয় নেতৃত্ব ছিল! প্রশ্নের ফলাফল সহ আপডেট করুন।
উইল

3

আমি যুক্তিযুক্ত নিশ্চিত যে এটি একটি এনপি-হার্ড সমস্যা। একটি 'নিখুঁত' সমাধান খুঁজতে আপনাকে প্রতিটি সম্ভাবনা নিখুঁতভাবে চেষ্টা করতে হবে, এবং এটি ক্ষতিকারক।

একটি পদ্ধতির লোভী ফিট ব্যবহার করা এবং তারপরে এটি উন্নত করার চেষ্টা করা হবে। এটি একটি খারাপভাবে স্থাপন করা চিত্র (শেষেরগুলির মধ্যে একটি) এবং এটি স্থাপন করার জন্য অন্য কোনও জায়গা সন্ধানের মাধ্যমে হতে পারে, তারপরে সেই চিত্রটি নিয়ে যাওয়া এবং এটিকে চালনা করা ইত্যাদি। আপনি যখন (ক) সময়ের বাইরে চলে যান (খ) ফিটটি 'যথেষ্ট পরিমাণে ভাল' হয় তখন আপনি সম্পন্ন হন।

আপনি যদি কোনও সম্ভাব্য উপাদানটি প্রবর্তন করেন তবে এটি অনুকরণযুক্ত অ্যানিলিং পদ্ধতির বা জেনেটিক অ্যালগরিদমকে পেতে পারে। সম্ভবত আপনি যা অর্জন করার চেষ্টা করছেন তা হ'ল ত্রুটিগুলি সমানভাবে ছড়িয়ে দেওয়া। আমি সন্দেহ করি এটি ইতিমধ্যে আপনি যা করছেন তার খুব কাছাকাছি এসে গেছে উত্তরটি: ডান অ্যালগরিদমের সাহায্যে আপনি আরও ভাল ফলাফল দ্রুত পেতে পারেন তবে নির্বাণের কোনও যাদু শর্টকাট নেই।


হ্যাঁ, এটি আপনি ইতিমধ্যে যা করছেন এর সাথে মিল রয়েছে। মুল বক্তব্যটি হ'ল একটি যাদু জবাবটি ভুলে যাওয়া এবং ২ টি অ্যালগরিদমের শর্তে চিন্তা করা: প্রথমে পূরণ করুন, তারপরে অনুকূলিত করুন।

ভরাট হতে পারে: এলোমেলো, সেরা উপলব্ধ, প্রথম সেরা, যথেষ্ট ভাল, একরকম গরম জায়গা।

অপ্টিমাইজটি এলোমেলো হতে পারে, সবচেয়ে খারাপ সমাধান করতে পারে, বা (যেমন আমি পরামর্শ দিয়েছি) সিমুলেটেড অ্যানিলিং বা জেনেটিক অ্যালগরিদম।

আপনার 'ধার্মিকতা' এর একটি মেট্রিক এবং আপনি এটিতে ব্যয় করার জন্য প্রস্তুত সময় এবং কেবলমাত্র পরীক্ষার প্রয়োজন। অথবা এমন কাউকে খুঁজে নিন যিনি আসলে এটি করেছেন।


আপনি প্রশ্নের ঠিক বর্ণিত পদ্ধতির বর্ণনা দিচ্ছেন ...?
উইল

1

যদি শেষ টাইলগুলি আপনার সমস্যা হয় তবে আপনার এগুলি প্রথম দিকে করার চেষ্টা করা উচিত, কোনওভাবে;)

একটি পদ্ধতির টালিটি দেখতে হবে যা এর ম্যাচগুলির শীর্ষ x% থেকে খুব দূরে (স্বজ্ঞাত আমি 33% এর সাথে যাচ্ছি) এবং এটি সেরা ম্যাচে রাখে। এটি যেভাবেই এটি পেতে পারে এটি সেরা ম্যাচ।

তবুও আপনি সবচেয়ে খারাপ টাইলের জন্য সেরা ম্যাচটি ব্যবহার না করা বেছে নিতে পারেন, তবে এটি যেখানে সেই স্লটের সেরা ম্যাচের তুলনায় সর্বনিম্ন ত্রুটির পরিচয় দেয়, যাতে আপনি নিজের পক্ষে আপনার সেরা ম্যাচগুলি পুরোপুরি ছুঁড়ে না ফেলে " ক্ষতি নিয়ন্ত্রণ".

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

প্রান্তে সনাক্তকরণের জায়গায়, আপনি প্রথম y% লোভজনকভাবে স্থাপন করতে চাইতে পারেন (সম্ভবত আপনি "দৃg়তা" এর একটি নির্দিষ্ট প্রান্তের নীচে নেমে যাওয়া অবধি টাইলস বামে) যাতে "হট স্পট" সত্যিই সুন্দরভাবে মোকাবেলা করা হয়, এবং তারপরে বাকীগুলির জন্য "ক্ষয় নিয়ন্ত্রণ" এ স্যুইচ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.