চিত্র তুলনা - দ্রুত অ্যালগরিদম


393

আমি ইমেজগুলির একটি বেস টেবিল তৈরি করতে চাইছি এবং তারপরে কোনও নতুন চিত্রের তুলনায় নতুন চিত্রটি বেজটির সঠিক (বা বন্ধ) সদৃশ কিনা তা নির্ধারণ করতে compare

উদাহরণস্বরূপ: আপনি যদি একই চিত্রের ১০০ বারের স্টোরেজ হ্রাস করতে চান তবে আপনি এটির একটি অনুলিপি সঞ্চয় করতে পারেন এবং এতে রেফারেন্স লিঙ্ক সরবরাহ করতে পারেন। যখন কোনও নতুন চিত্র প্রবেশ করা হয় আপনি কোনও বিদ্যমান চিত্রের সাথে তুলনা করতে চান তা নিশ্চিত করার জন্য এটি কোনও সদৃশ নয় ... ধারণা?

আমার একটি ধারণাটি ছিল একটি ছোট থাম্বনেইলে হ্রাস করা এবং এলোমেলোভাবে 100 পিক্সেল অবস্থান বেছে নেওয়া এবং তুলনা করা।

উত্তর:


459

নীচে এই সমস্যাটি সমাধান করার জন্য তিনটি পন্থা রয়েছে (এবং আরও অনেকগুলি রয়েছে)।

  • প্রথমটি হ'ল কম্পিউটার ভিশনে একটি স্ট্যান্ডার্ড অ্যাপ্রোচ, কী কী পয়েন্ট মেলানো। এটি প্রয়োগ করতে কিছু পটভূমি জ্ঞানের প্রয়োজন হতে পারে এবং ধীর হতে পারে।

  • দ্বিতীয় পদ্ধতিতে কেবল প্রাথমিক ইমেজ প্রসেসিং ব্যবহার করা হয় এবং এটি প্রথম পদ্ধতির চেয়ে সম্ভাব্য দ্রুত এবং এটি বাস্তবায়নের জন্য সোজা। যাইহোক, এটি বোধগম্যতার মধ্যে যা লাভ করে, তার দৃness়তার অভাব হয় - মাপানো, ঘোরানো বা বর্ণহীন চিত্রগুলিতে মিলানো ব্যর্থ।

  • তৃতীয় পদ্ধতিটি দ্রুত এবং শক্তিশালী উভয়ই, তবে সম্ভবত এটি কার্যকর করা সবচেয়ে কঠিন।

কী-পয়েন্ট ম্যাচিং

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

কী-পয়েন্টের ম্যাচিংয়ের একটি নেতিবাচক দিক হল নির্দোষ বাস্তবায়নের চলমান সময়: O (n ^ 2m), যেখানে এন প্রতিটি চিত্রের কী-পয়েন্টগুলির সংখ্যা এবং ডেটাবেজে চিত্রের সংখ্যা এম m কিছু চতুর অ্যালগরিদমগুলি চতুর্থাংশ বা বাইনারি স্পেস পার্টিশনগুলির মতো নিকটতম ম্যাচটি দ্রুত খুঁজে পেতে পারে।


বিকল্প সমাধান: হিস্টোগ্রাম পদ্ধতি

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

রঙের হিস্টোগ্রামগুলি গণনা করা সহজবোধ্য - কেবল আপনার হিস্টোগ্রাম বালতিগুলির জন্য পরিসর বাছুন এবং প্রতিটি পরিসরের জন্য, এই ব্যাপ্তির রঙের সাথে পিক্সেলের সংখ্যাটি ট্যালি করুন। উদাহরণস্বরূপ, "সবুজ" হিস্টোগ্রামটি বিবেচনা করুন এবং ধরুন আমরা আমাদের হিস্টগ্রামের জন্য 4 টি বালতি বেছে নিই: 0-63, 64-127, 128-191, এবং 192-255। তারপরে প্রতিটি পিক্সেলের জন্য আমরা সবুজ মানটি দেখি এবং উপযুক্ত বালতিতে একটি সংযোজন করি। যখন আমরা টালিংয়ের কাজ শেষ করি, তখন আমরা সবুজ চ্যানেলের জন্য একটি সাধারণ হিস্টোগ্রাম পেতে প্রতিটি বালতি মোট পিক্সেলের সংখ্যায় বিভাজন করি।

জমিন দিকের হিস্টোগ্রামের জন্য, আমরা ইমেজটিতে প্রান্ত সনাক্তকরণের মাধ্যমে শুরু করেছি। প্রতিটি প্রান্ত বিন্দুতে প্রান্তের দিকে লম্ব দিকের দিকে নির্দেশ করে একটি সাধারণ ভেক্টর রয়েছে। আমরা সাধারণ ভেক্টরের কোণকে 0 এবং PI এর মধ্যে 6 বালতির একটিতে কোয়ান্টাইজ করেছিলাম (যেহেতু প্রান্তগুলিতে 180-ডিগ্রি প্রতিসাম্য রয়েছে, তাই আমরা -PI এবং 0 এর মধ্যে কোণগুলি 0 এবং PI এর মধ্যে রূপান্তরিত করেছি)। প্রতিটি দিকের প্রান্ত পয়েন্টগুলির সংখ্যা নির্ধারণের পরে, আমাদের কাছে টেক্সচারের দিকনির্দেশনা উপস্থাপনকারী একটি অ-নর্মালাইজড হিস্টোগ্রাম রয়েছে, যা আমরা প্রতিটি বালতিটি ইমেজের মোট প্রান্ত পয়েন্টের দ্বারা ভাগ করে স্বাভাবিক করি ized

টেক্সচার স্কেল হিস্টোগ্রাম গণনা করতে, প্রতিটি প্রান্ত বিন্দুর জন্য, আমরা একই দিকের সাথে পরবর্তী-নিকটতম প্রান্ত বিন্দুর দূরত্বটি পরিমাপ করেছি। উদাহরণস্বরূপ, যদি প্রান্ত বিন্দু A এর 45 ডিগ্রির একটি দিক থাকে, তবে অ্যালগরিদম সেই দিকে চলে। যতক্ষণ না এটি 45 ডিগ্রি (বা যুক্তিসঙ্গত বিচ্যুতির মধ্যে) দিয়ে একটি অন্য প্রান্ত পয়েন্ট খুঁজে পায়। প্রতিটি প্রান্ত বিন্দুর জন্য এই দূরত্বটি গণনার পরে, আমরা সেই মানগুলিকে একটি হিস্টোগ্রামে ফেলে দেই এবং মোট প্রান্ত বিন্দুর সংখ্যা দ্বারা ভাগ করে এটি স্বাভাবিক করি।

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

|A.green_histogram.bucket_1 - B.green_histogram.bucket_1| 

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


তৃতীয় পছন্দ - কীপয়েন্টস + সিদ্ধান্ত গাছ

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

আপডেট :

আমার ভুল - সিমেন্টিক টেক্সটোন ফরেস্টসের কাগজটি বিশেষত চিত্রের মিলের বিষয়ে নয়, বরং অঞ্চল লেবেলিংয়ের বিষয়ে। মূল কাগজ যা মিলছে এটি হ'ল: এলোমেলো গাছ ব্যবহার করে কী-পয়েন্ট রিকগনিশন । এছাড়াও, নীচের কাগজপত্রগুলি ধারণাগুলির বিকাশ চালিয়ে যায় এবং শিল্পের প্রতিনিধিত্ব করে (সি। 2010):


হিস্টোগ্রাম পদ্ধতির সর্বাধিক বোধ করা যায় বলে মনে হয়। আমি ধরে নিচ্ছি যে চিত্রটি তুলনা করা হচ্ছে এমন ক্ষেত্রে যদি আপনি চিত্রটি চারদিকে ঘুরিয়ে দিতে পারেন তবে একই চিত্রটি 4 হিসাবে দেখানো হবে - ধন্যবাদ
মেদিন

4
@ মাইড ঠিক আছে অন্য কিছু বিবেচনা করার বিষয়: আপনার সমস্যার উপর নির্ভর করে আপনার অ্যালগরিদমে আপনাকে সমস্ত 5 টি হিস্টোগ্রাম ব্যবহার করার প্রয়োজন নেই। টেক্সচারের দিকনির্দেশ হিস্টোগ্রামটি বাতিল করা আপনাকে চিত্রের ঘোরানো সংস্করণগুলি মেলাতে অনুমতি দেবে। টেক্সচার স্কেল হিস্টোগ্রাম বাতিল করা আপনাকে চিত্রের পুনঃ-স্কেল করা সংস্করণগুলির সাথে মেলানোর অনুমতি দেবে। আপনি মিলের তুলনা করার কিছু ক্ষমতা হারাবেন, তবে এটি আপনার পরিস্থিতির উপর নির্ভর করে সমস্যা হতে পারে না। এছাড়াও, যেহেতু গণনা টেক্সচারের তথ্যগুলি অ্যালগরিদমের সবচেয়ে ব্যয়বহুল অংশ, তাই এটি আপনার অ্যালগোরিদমকেও দ্রুত তৈরি করবে।
কাইল সিমেক

@ রেডমোস্কিটো: আমার একটি প্রশ্ন আছে। উদাহরণস্বরূপ আপনি কীভাবে সবুজ রঙের হিস্টগ্রামের সংখ্যাসূচক মান পাবেন? সুতরাং আপনি এটি অন্য চিত্রের হিস্টোগ্রামের সাথে বিয়োগ করতে পারেন? ধরা যাক যে আমাদের কাছে 0-63 বালতির 3 পিক্সেল এবং p৪-১২ 64 এর সাথে সম্পর্কিত 5 পিক্সেল সহ একটি সবুজ হিস্টোগ্রাম রয়েছে। কোনটি মান?
গতিশীল

3
@ ইকাসো যদি এর চিত্রটি যথাযথভাবে একই চিত্র হয় তবে আপনি সম্ভবত এর মতো কিছু ব্যবহার করতে চান না এবং সাধারণ সিআরসি বা MD5 তুলনা ব্যবহার করার বিষয়টি বিবেচনা করেন। এটি যদি পর্যাপ্ত না হয় তবে একক পিক্সেল যেমন আলাদা বা মেটাডেটা পরিবর্তিত হয়েছে, হিস্টোগ্রাম পদ্ধতিটিও যথেষ্ট। যদি আপনার চিত্রগুলি একই তবে ঘোরানো বা স্কেল করা থাকে তবে একটি হিস্টগ্রাম ভিত্তিক পদ্ধতি পর্যাপ্ত হতে পারে তবে সম্ভবত এটি ব্যর্থ হবে। যদি আপনার চিত্রগুলির রঙ পরিবর্তন হয়ে থাকে তবে আপনার আগ্রহের পয়েন্ট ভিত্তিক অ্যালগরিদম ব্যবহার করা দরকার।
রিওক্স

5
আমি এটি যোগ করতে চাই আজকাল, এসআইএফটি-র অনেকগুলি দ্রুত বিকল্প বিদ্যমান যেমন FAST সনাক্তকারী এবং বাইনারি বর্ণনাকারী (ব্রি F ব্রিজ, ব্রিস্ক, ওআরবি, ফ্রিজেক, বিনবুস্ট) কয়েকটি নাম রাখার জন্য। বাইনারি বর্ণনাকারীদের উপর একটি টিউটোরিয়াল এখানে পাওয়া যাবে: gilscvblog.wordpress.com/2013/08/26/…
গিললেভি

85

আমার জানা সবচেয়ে ভাল পদ্ধতিটি হ'ল পার্সেপুয়াল হ্যাশ ব্যবহার করা। এখানে এমন একটি হ্যাশটির একটি ভাল ওপেন সোর্স বাস্তবায়ন উপস্থিত রয়েছে বলে মনে হচ্ছে:

http://phash.org/

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

ফ্যাশ বিভিন্ন ধরণের হ্যাশ সরবরাহ করে এবং চিত্র, অডিও বা ভিডিওর জন্য ব্যবহার করা যেতে পারে।


এই পদ্ধতির মধ্যে কে আকর্ষণীয় তা গিথুব.com
আলেক্সি ভয়েটেনকো

@ আলেক্সিওয়েটেনকো এটির পূর্বনির্ধারিত কনফিগারেশনে ফ্যাশ.আর.জি. দ্বারা উত্পাদিত হ্যাশগুলির সাথে কি সামঞ্জস্য রয়েছে?
মাইকেল

1
আমার অভিজ্ঞতায় ফ্যাশ একই চিত্রের বিভিন্ন আকারের সন্ধানের জন্য ভাল কাজ করে তবে অনুরূপ চিত্রগুলির জন্য নয়। যেমন একই বস্তুর দুটি পৃথক ফটোতে খুব আলাদা হ্যাশ থাকতে পারে।
রেনা

39

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

সাধারণ সমাধানের জন্য, বেশ কয়েকটি কৌশল প্রয়োগ করা ভাল। প্রতিটি অ্যালগরিদম নির্দিষ্ট ধরণের চিত্রের রূপান্তরগুলির জন্য সবচেয়ে উপযুক্ত এবং আপনি এটির সুবিধা নিতে পারেন।

শীর্ষে, দ্রুততম অ্যালগরিদম; নীচে সবচেয়ে ধীর (যদিও আরও সঠিক)। দ্রুত স্তরে কোনও ভাল মিল পাওয়া গেলে আপনি ধীর গতির এড়িয়ে যেতে পারেন।

  • সঠিক নকলের জন্য ফাইল-হ্যাশ ভিত্তিক (এমডি 5, শ 1, ইত্যাদি)
  • উদ্ধারকৃত চিত্রগুলির জন্য উপলব্ধিযোগ্য হ্যাশিং (ফ্যাশ)
  • পরিবর্তিত চিত্রগুলির জন্য বৈশিষ্ট্য-ভিত্তিক (SIFT)

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

ফ্যাশ সম্পর্কে সত্যিই দুর্দান্ত জিনিসটি হ'ল একবার আপনি আপনার হ্যাশ ডাটাবেসটি তৈরি করেন (যা আমার জন্য প্রায় 1000 চিত্র / সেকেন্ড), অনুসন্ধানগুলি খুব দ্রুত হতে পারে, বিশেষত যখন আপনি সম্পূর্ণ হ্যাশ ডাটাবেসটিকে স্মৃতিতে রাখতে পারেন। এটি মোটামুটি কার্যকর কারণ একটি হ্যাশটি কেবলমাত্র 8 বাইট।

উদাহরণস্বরূপ, আপনার যদি 1 মিলিয়ন চিত্র থাকে তবে এর জন্য 1 মিলিয়ন 64-বিট হ্যাশ মান (8 এমবি) এর অ্যারে প্রয়োজন। কিছু সিপিইউতে এটি এল 2 / এল 3 ক্যাশে ফিট করে! ব্যবহারিক ব্যবহারে আমি একটি গিরি-হ্যাম / সেকেন্ডের তুলনায় একটি কোরআই 7 দেখেছি, এটি কেবলমাত্র সিপিইউতে মেমরি ব্যান্ডউইথের প্রশ্ন question একটি 1 বিলিয়ন-চিত্রের ডাটাবেস একটি 64-বিট সিপিইউতে ব্যবহারিক (8 গিগাবাইট র‌্যাম প্রয়োজন) এবং অনুসন্ধানগুলি 1 সেকেন্ডের বেশি হবে না!

পরিবর্তিত / ক্রপযুক্ত চিত্রগুলির জন্য এটি SIFT এর মতো রূপান্তর-আক্রমণকারী বৈশিষ্ট্য / কীপয়েন্ট ডিটেক্টর হিসাবে যাওয়ার উপায় বলে মনে হচ্ছে। এসআইএফটি ভাল কী-পয়েন্ট তৈরি করবে যা শস্য / ঘোরানো / আয়না ইত্যাদি সনাক্ত করতে পারে তবে ফ্যাশ দ্বারা ব্যবহৃত হাম্বান দূরত্বের তুলনায় বর্ণনাকারীর তুলনা খুব ধীর। এটি একটি প্রধান সীমাবদ্ধতা। অনেকগুলি তুলনা করার দরকার রয়েছে, যেহেতু সর্বাধিক আইএক্সজেএক্সকে বর্ণনাকারী একটি চিত্র দেখার জন্য তুলনা করে (I = num haystack চিত্র, খড়ের প্রতি ছবিতে J = টার্গেট কীগুলি, সূঁচের চিত্রের প্রতি কে = টার্গেট কীপয়েন্ট)।

গতি ইস্যুটি পেতে, আমি উপ-আয়তক্ষেত্রটি নির্ধারণ করতে বৈশিষ্ট্য আকার / ব্যাসার্ধ ব্যবহার করে প্রতিটি পাওয়া কী-পয়েন্টের চারপাশে ফ্যাশ ব্যবহার করার চেষ্টা করেছি। এই কাজটি ভালভাবে তৈরি করার কৌশলটি হ'ল ব্যাসার্ধকে বাড়াতে / সঙ্কুচিত করে বিভিন্ন সাব-রেক্টর স্তর তৈরি করতে (সুই ইমেজের উপরে)। সাধারণত প্রথম স্তরটি (আনস্কલ્ડ) মিলবে তবে প্রায়শই এটি আরও কয়েকটা সময় নেয়। কেন এটি কাজ করে আমি 100% নিশ্চিত নই, তবে আমি কল্পনা করতে পারি এটি ফ্যাশগুলির পক্ষে কাজ করতে খুব ছোট এমন বৈশিষ্ট্যগুলিকে সক্ষম করে (32x32 এ ফ্যাশ আইশের চিত্রগুলি) সক্ষম করে।

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

আপনি সম্ভবত বৈশিষ্ট্য সনাক্তকরণের আগে সমস্ত খড়ের ছিদ্র চিত্রগুলি (এবং সুই) একটি ছোট আকারে স্কেল করতে চান (আমি সর্বোচ্চ মাত্রা সহ 210px ব্যবহার করি)। এটি চিত্রের গোলমাল কমিয়ে দেবে (কম্পিউটারের দৃষ্টিভঙ্গির অ্যালগরিদমের জন্য সর্বদা একটি সমস্যা), আরও বিশিষ্ট বৈশিষ্ট্যগুলিতে ডিটেক্টরকে ফোকাস করবে।

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

আপনি যে বৈশিষ্ট্যগুলি চেয়েছিলেন তার চেয়ে কম ফিরিয়ে দিলে কী-পয়েন্ট ডিটেক্টর সম্ভবত সবচেয়ে ভাল কাজ করছে। উদাহরণস্বরূপ, আপনি যদি 400 এর জন্য জিজ্ঞাসা করেন এবং 300 ফিরে পান তবে এটি ভাল। আপনি যদি প্রতিবার 400 ফিরে পান তবে সম্ভবত কিছু ভাল বৈশিষ্ট্য বাদ দিতে হয়েছিল।

সুই ইমেজের খড়ের ছিদ্রগুলির চেয়ে কম কী পয়েন্ট থাকতে পারে এবং এখনও ভাল ফলাফল পেতে পারে। আরও যোগ করা অগত্যা আপনার বিপুল পরিমাণে লাভ করে না, উদাহরণস্বরূপ জে = 400 এবং কে = 40 এর সাথে আমার হিট রেট প্রায় 92%। জে = 400 এবং কে = 400 এর সাথে হিট রেট কেবল 96% পর্যন্ত যায়।

স্কেলিং, রোটেশন, মিররিং ইত্যাদি সমাধানের জন্য আমরা হামিং ফাংশনের চরম গতির সুবিধা নিতে পারি A একাধিক-পাস কৌশল ব্যবহার করা যেতে পারে। প্রতিটি পুনরাবৃত্তিতে, উপ-আয়তক্ষেত্রগুলিকে রূপান্তর করুন, পুনরায় হ্যাশ করুন এবং আবার অনুসন্ধান কার্যটি চালান।


8

কার্টম্যান নির্দেশিত হিসাবে, সঠিক ডুপ্লিকেটগুলি সন্ধানের জন্য আপনি যে কোনও ধরণের হ্যাশ মান ব্যবহার করতে পারেন।

কাছের চিত্রগুলি সন্ধানের জন্য একটি সূচনা পয়েন্ট এখানে হতে পারে । এটি পুনরুদ্ধারকৃত চিত্রগুলি এখনও একই দৃশ্যে প্রদর্শিত হচ্ছে কিনা তা খতিয়ে দেখতে সিজি সংস্থাগুলি দ্বারা ব্যবহৃত একটি সরঞ্জাম।


7

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

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


7

আমার সংস্থার প্রতিমাসে প্রস্তুতকারকদের কাছ থেকে প্রায় 24 মিলিয়ন চিত্র আসে। আমরা আমাদের ক্যাটালগটিতে যে চিত্রগুলি আপলোড করি তা নতুন চিত্র হয় তা নিশ্চিত করার জন্য আমি দ্রুত সমাধানের সন্ধান করছিলাম ।

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

ফ্যাশ / আহশের জন্য, এটি পরীক্ষা করে দেখুন: চিত্রশক্তি

আমি আমার কোড এবং আমার যথার্থতা পোস্ট করে * রেডক্যালাক্স এর পোস্টটি প্রসারিত করতে চেয়েছিলাম।

আমি কি করবো:

from PIL import Image
from PIL import ImageFilter
import imagehash

img1=Image.open(r"C:\yourlocation")
img2=Image.open(r"C:\yourlocation")
if img1.width<img2.width:
    img2=img2.resize((img1.width,img1.height))
else:
    img1=img1.resize((img2.width,img2.height))
img1=img1.filter(ImageFilter.BoxBlur(radius=3))
img2=img2.filter(ImageFilter.BoxBlur(radius=3))
phashvalue=imagehash.phash(img1)-imagehash.phash(img2)
ahashvalue=imagehash.average_hash(img1)-imagehash.average_hash(img2)
totalaccuracy=phashvalue+ahashvalue

এখানে আমার ফলাফলগুলির কয়েকটি:

item1  item2  totalsimilarity
desk1  desk1       3
desk1  phone1     22
chair1 desk1      17
phone1 chair1     34

আশাকরি এটা সাহায্য করবে!


6

আমি বিশ্বাস করি যে চিত্রের আকারটিকে প্রায় আইকন আকারে নামিয়ে 48x48 বলুন, তারপরে গ্রেস্কেলতে রূপান্তরিত করুন, তারপরে পিক্সেল বা ডেল্টার মধ্যে পার্থক্যটি ভালভাবে কাজ করা উচিত। যেহেতু আমরা পিক্সেল রঙের পরিবর্তনের সাথে তুলনা করছি প্রকৃত পিক্সেলের রঙের চেয়ে চিত্রটি কিছুটা হালকা বা গাer় হয় তা বিবেচ্য নয়। পিক্সেলগুলি খুব হালকা / অন্ধকার হয়ে যাওয়ার কারণে বড় পরিবর্তনগুলি বিবেচনা করবে। আপনি এটি এক সারিতে প্রয়োগ করতে পারেন বা আপনি যথার্থতা বাড়াতে চান। তুলনামূলক কী তৈরির জন্য সর্বাধিক আপনার কাছে 47x47 = 2,209 বিয়োগফল রয়েছে।


3

100 টি এলোমেলো পয়েন্ট বাছাইয়ের অর্থ এই হতে পারে যে অনুরূপ (বা মাঝেমধ্যে এমনকি ভিন্নতাযুক্ত) চিত্রগুলি একই হিসাবে চিহ্নিত হবে, যা আমি ধরে নিয়েছি আপনি যা চান তা নয়। চিত্রগুলি বিভিন্ন ফর্ম্যাট (png, jpeg, ইত্যাদি), বিভিন্ন আকারের, বা পৃথক মেটাডেটা থাকলে MD5 হ্যাশগুলি কাজ করবে না। সমস্ত চিত্রকে ছোট আকারে হ্রাস করা ভাল বাজি, পিক্সেল-পিক্সেলের তুলনা করা যতক্ষণ আপনি একটি ভাল চিত্রের গ্রন্থাগার / দ্রুত ভাষা ব্যবহার করছেন ততক্ষণ বেশি সময় নেওয়া উচিত নয় এবং আকারটি যথেষ্ট ছোট।

আপনি এগুলি ক্ষুদ্রতর করে তুলতে চেষ্টা করতে পারেন, তারপরে যদি তারা একই হয় তবে আরও বড় আকারের সাথে অন্য তুলনা করা যায় - গতি এবং নির্ভুলতার একটি ভাল সংমিশ্রণ হতে পারে ...


আপনি যদি সঠিক ডুপ্লিকেট খুঁজছেন তবে বিভিন্ন ফর্ম্যাট / মেটাডেটা সহ, আপনি প্রকৃত পিক্সেল মানগুলির একটি হ্যাশ (যেমন MD5) করতে পারেন। ইমেজম্যাগিক এটিকে স্বাক্ষর বলে (ক্রিপ্টোগ্রাফিক স্বাক্ষরের সাথে সম্পর্কিত নয়)। আপনি এটিকে প্রথমে হ্রাস করতেও পারেন, উদাহরণস্বরূপ জেপিজি আর্টিক্টসের প্রভাব হ্রাস করতে পিক্সেল প্রতি 4 বিট কাটা বা সামান্য পুনরায় রঙ করা চিত্রগুলির সাথে মেলে গ্রেস্কলে রূপান্তর।
রেনা

2

আপনার যদি প্রচুর পরিমাণে চিত্র থাকে তবে একটি ব্লুম ফিল্টারটি দেখুন , যা সম্ভাব্য তবে কার্যকর ফলাফলের জন্য একাধিক হ্যাশ ব্যবহার করে। যদি চিত্রগুলির সংখ্যা বিশাল না হয় তবে এমডি 5 এর মতো একটি ক্রিপ্টোগ্রাফিক হ্যাশ যথেষ্ট।


সুতরাং (ব্লুম ফিল্টারটি বোঝার চেষ্টা করা) - এর অর্থ কি আপনি বেস চিত্রটিতে র্যান্ডম পিক্সেল পয়েন্টগুলি নির্বাচন করেন, এলোমেলোভাবে পিক্সেলের একটি লাল / সবুজ / নীল মান পাবেন - তারপরে নতুন চিত্রের সাথে তুলনা করুন? এবং তারপরে দুটি চিত্রের মিল কতটা সমান তা নির্ধারণ করতে একটি সম্ভাব্যতা স্তর (90% মিল) ব্যবহার করুন?
meade

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