পয়েন্ট প্যাটার্ন স্বীকৃতি


46

দুটি ভিন্ন আকারের স্কোয়ারের মধ্যে ছড়িয়ে ছিটিয়ে থাকা দুটি ভিন্ন আকারের পয়েন্টের (সরলতার জন্য 2 ডি) প্রশ্নটি হ'ল:

1- কিভাবে একটি বৃহত্তর মাধ্যমে ছোট একটি ঘটনা খুঁজে পেতে?
2- নিম্নলিখিত চিত্রটিতে প্রদর্শিত হিসাবে সংঘটনগুলি কীভাবে র‌্যাঙ্ক করবেন সে সম্পর্কে কোনও ধারণা?

এখানে প্রশ্নের একটি সাধারণ প্রদর্শন এবং একটি পছন্দসই সমাধান: এখানে চিত্র বর্ণনা লিখুন


আপডেট 1:
নীচের চিত্রটি সমস্যাটি অনুসন্ধান করা হচ্ছে সম্পর্কে কিছুটা বাস্তবসম্মত দৃষ্টিভঙ্গি দেখায়। এখানে চিত্র বর্ণনা লিখুন

মন্তব্য সম্পর্কিত নিম্নলিখিত বৈশিষ্ট্যগুলি প্রয়োগ:

  • পয়েন্ট সঠিক অবস্থান উপলব্ধ
  • পয়েন্ট সঠিক আকার উপলব্ধ
    • আকার শূন্য (~ 1) = কেবল একটি পয়েন্ট হতে পারে
  • সমস্ত পয়েন্ট সাদা পটভূমিতে কালো black
  • ধূসর-স্কেল / অ্যান্টি-এলিয়জিং প্রভাব নেই

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


1
আপনি কি এই জাতীয় বিন্দুর সাথে মিলে যাওয়ার সমাধান খুঁজছেন, বা আরও জটিল চিত্রের জন্য? ছবিগুলিতে কতগুলি বিন্দু থাকতে পারে?

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

যে সমস্যার জন্য আমি এটি নিয়ে কাজ করছি সেখানে পয়েন্টের সেট রয়েছে (প্রতিটি কয়েকশ পয়েন্ট) যার মধ্যে আরও ছোট আকারের পয়েন্ট সেট (বলুন <100) অনুসন্ধান করা হচ্ছে। উপরের বিক্ষোভটি এত সরল ও পরিষ্কার, তবে আসল সমস্যাটি জটিল দেখাচ্ছে। তাদের মধ্যে অনাকাঙ্ক্ষিত পয়েন্টের ভিত্তিতে র‌্যাঙ্ক করা ম্যাচগুলি খুঁজে পাওয়ার আগ্রহও রয়েছে।
বিকাশকারী

1
সেখানে কি কেবল কালো এবং সাদা বিন্দু থাকবে? আপনি কি ক্যামেরা / স্ক্যানার / অন্য কিছু থেকে পেয়ে যাচ্ছেন? বাইনারি মানগুলি আরও দ্রুত গণনা করতে পারে make
এন্ডোলিথ

আপনার বিন্দুগুলির কেন্দ্রগুলি খুঁজে পেতে সমস্যা আছে, বা কেবল বিন্দুগুলির অবস্থানগুলি জেনে বড় ছবিতে ছোটখাটো সন্ধান করার সাথে?

উত্তর:


17

এটি সেরা সমাধান নয়, তবে এটি একটি সমাধান। আমি আরও ভাল কৌশল শিখতে চাই:

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

আপনি এফএফটি পদ্ধতিটি ব্যবহার করে ক্রস-পারস্পরিক সম্পর্কের গতি বাড়িয়ে তুলতে পারেন, তবে আপনি যদি কেবলমাত্র একটি বৃহত টার্গেট চিত্রের সাথে একটি ছোট উত্স চিত্রের সাথে মেলে থাকেন তবে ব্রুট-ফোর্স মাল্টিপল-অ্যান্ড-অ্যাড পদ্ধতিটি কখনও কখনও (সাধারণত নয়) দ্রুত হয়।

উৎস:

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

টার্গেট:

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

ক্রস-কোরিলেশন:

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

দুটি উজ্জ্বল স্পটগুলি হ'ল লোকেশন match

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

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

এই পৃষ্ঠাটি এটি কীভাবে হবে তার উদাহরণ দেখায়, তবে অ্যালগরিদম দেয় না।

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

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

গ্রেস্কেল এবং এফএফটি পদ্ধতি ব্যবহার করে দ্রুত পাইথনের উদাহরণ:

from __future__ import division
from pylab import *
import Image
import ImageOps

source_file = 'dots source.png'
target_file = 'dots target.png'

# Load file as grayscale with white dots
target = asarray(ImageOps.invert(Image.open(target_file).convert('L')))

close('all')
figure()
imshow(target)
gray()
show()

source_Image = ImageOps.invert(Image.open(source_file).convert('L'))

for angle in (0, 180):
    source = asarray(source_Image.rotate(angle, expand = True))
    best_match = max(fftconvolve(source[::-1,::-1], source).flat)

    # Cross-correlation using FFT
    d = fftconvolve(source[::-1,::-1], target, mode='same')

    figure()
    imshow(source)


    # This only finds a single peak.  Use something that finds multiple peaks instead:
    peak_x, peak_y = unravel_index(argmax(d),shape(d))

    figure()    
    plot(peak_y, peak_x,'ro')
    imshow(d)

    # Keep track of all these matches:
    print angle, peak_x, peak_y, d[peak_x,peak_y] / best_match

1-রঙ বিটম্যাপ

1-রঙের বিটম্যাপের জন্য, যদিও এটি আরও দ্রুত হবে। আন্তঃসম্পর্ক ঘটে:

  • লক্ষ্য চিত্রের উপর উত্স ইমেজ রাখুন
  • উত্স চিত্রটি 1 পিক্সেল দ্বারা সরান
    • বিটওয়াইস-এবং সমস্ত ওভারল্যাপিং পিক্সেল
    • সমস্ত 1s যোগফল
  • ...

বাইনারিতে গ্রেস্কেল চিত্রটি প্রসারিত করা এবং তারপরে এটি করা যথেষ্ট ভাল হতে পারে।

পয়েন্ট মেঘ

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


1
এটা ঠিক, সমস্যাটি তদন্ত করার জন্য কোনও স্কেলিং নেই তবে ঘূর্ণন ঘটতে পারে। লিঙ্ক এবং উত্তর জন্য ধন্যবাদ।
বিকাশকারী

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

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

1
হ্যাঁ, আবর্তনের স্বাধীনতা যুক্ত করার সময় এটি অপ্রয়োজনীয় হয়ে ওঠে। এই কারণেই আরএনএসএসি এর মতো পদ্ধতিগুলি বিকাশ করা হয়েছিল। আমি মনে করি এটি ডিএসপি বক্সের বাইরে চিন্তা করতে সহায়তা করে।
ম্যাট এম।

@ ম্যাটম: এটি কাজ করে, এটি খুব ধীর। :)
এন্ডোলিথ

22

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

ওপেনসিভি এই সমাধানগুলি গণনার জন্য সরঞ্জাম সরবরাহ করে তবে আপনি ম্যাটল্যাবও ব্যবহার করতে পারেন। ওপেনসিভি ব্যবহার করে এখানে র্যানস্যাকের উদাহরণ রয়েছে । এবং আরও একটি সম্পূর্ণ বাস্তবায়ন

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

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

আমি অনুমান করি যে ক্রস-সম্পর্ক সম্পর্কিত পদ্ধতিগুলি আপনার পক্ষে কাজ করতে পারে যেহেতু ডেটা এতটাই পরিষ্কার। সমস্যাটি হ'ল, আপনি ঘূর্ণনের সাথে আরও একটি ডিগ্রি স্বাধীনতা যুক্ত করেন এবং পদ্ধতিটি খুব ধীর হয়ে যায়।


আমি প্রশ্নটিতে আরও কিছু বিশদ যুক্ত করেছি। আমি গভীরভাবে আপনার লিঙ্কগুলি পরীক্ষা করব তবে দ্রুত ধারণাটি হ'ল এগুলি ভিন্ন ধারণা!
বিকাশকারী

1
দেখে মনে হচ্ছে এটি সত্যিই একটি র্যানস্যাক / হোমোগ্রাফি সমস্যা :)
ম্যাট এম।

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

সরল প্রশ্ন: আরএনএসএসি / হোমোগ্রাফি পদ্ধতিটি থ্রিডি পয়েন্ট ক্লাউডে প্রয়োগ করা কি সম্ভব / সম্ভাব্য?
বিকাশকারী

এটি কোনও বৈধ সমাধান নয়। দুর্ভাগ্যক্রমে প্রশ্নটিতে তীব্রতার তথ্য নেই এবং তাই সাধারণ বর্ণনাকারী স্কিমগুলি কাজ করবে না। সমস্যাটি বরং তার চেয়ে আরও জ্যামিতিক।
টোলগা বার্ডাল

3

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

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


1
আপনার ধারণার আরও ব্যাখ্যা সহ আপনি আমাদের একটি উদাহরণ দিতে পারেন? আপনার উত্তরের বর্তমান সংস্করণ আমার কাছে বিভ্রান্ত করছে।
বিকাশকারী

3

আমি খুব অবাক হয়েছি কেন কেন কেউ জেনারালাইজড হাফ ট্রান্সফর্ম পরিবারের পদ্ধতি উল্লেখ করেনি । তারা সরাসরি এই বিশেষ সমস্যাটি সমাধান করে।

এখানে আমি প্রস্তাব করছি:

  1. টেম্পলেটটি নিন এবং টেমপ্লেটের প্রান্তগুলি সূচী করে আর-টেবিল তৈরি করুন । আমি নির্বাচন করা প্রান্তগুলি নিম্নলিখিত:

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

  1. জেনারেলাইজড হাফ ট্রান্সফর্মের ডিফল্ট ওপেনসিভি বাস্তবায়ন পেতে ব্যবহার করুন: এখানে চিত্র বর্ণনা লিখুন

যেখানে মিলের অবস্থানগুলি চিহ্নিত করা হয়। প্রান্তগুলি একক বিন্দুতে হ্রাস পেলেও একই পদ্ধতিটি এখনও কার্যকর থাকবে কারণ পদ্ধতিটি চিত্রের তীব্রতার প্রয়োজন হয় না।

তদুপরি, Hough স্কিমগুলির জন্য রোটেশনগুলি পরিচালনা করা খুব স্বাভাবিক। আসলে, 2 ডি কেসের ক্ষেত্রে এটি সঞ্চয়ের মধ্যে কেবল একটি যুক্ত মাত্রা। যদি আপনি এটিকে সত্যিই দক্ষ করে তোলার বিষয়ে বিস্তারিত জানতে চান তবে এমআলরিক তার কাগজে প্রচুর কৌশল অবলম্বন করেছেন ।


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