চিত্রটিতে স্কোয়ার সন্ধান করা হচ্ছে


34

আমাকে ওপেনসিভি ব্যবহার করে একটি চিত্রের স্কোয়ারগুলি সন্ধান করতে হবে (মতলব বা অন্য কোনও সমস্যা নেই, সাধারণত আমি যা প্রত্যাশা করি সেগুলি কিছু ধারণা) are

নীচের পরীক্ষার চিত্রটি বিবেচনা করুন:

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

আমাকে উপরের চিত্রটিতে রঙিন স্কোয়ারগুলি সঠিকভাবে খুঁজে পেতে হবে (সাদা দীর্ঘ স্ট্রিপগুলি নয়)।

আমি কী করেছি :

  • আমি সাধারণ পদ্ধতি (যা OpenCV নমুনা দিয়ে আসে), অর্থাৎ প্রয়োগ contours এবং এটি সব রঙ প্লেন, এটা আনুমানিক এবং উপাদান = 4 সংখ্যার জন্য চেক করুন। এটি কিছুটা প্রসারিত করতে কাজ করে যে কয়েকটি স্কোয়ার সনাক্ত করা হয় বিশেষত অন্ধকারগুলি।

  • পরবর্তী পদক্ষেপটি আমি পূর্বাভাস ছিল । অর্থাত্ এই ব্যবস্থা স্থির । সুতরাং, যদি কিছু প্রাপ্ত হয় তবে আমি বাকীগুলির পূর্বাভাস দিতে পারি। এটি আরও কিছুটা প্রসারিত করতেও কাজ করেছিল। তবে নির্ভুলতা খুব খারাপ ছিল।

তবে আমি অনুভব করি যে এখানে পূর্বাভাস একটি ভাল পদ্ধতি নয় এবং এটি সর্বদা প্রথম ধাপে দেওয়া সঠিক উত্তর সরবরাহ করে না।

আমার যা দরকার :

1) এই স্কোয়ারগুলি আরও নিখুঁতভাবে সনাক্ত করার জন্য আরও ভাল কোনও উপায় আছে কি? নাকি একাধিক পদ্ধতি?

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

কখনও কখনও, চিত্রগুলি আরও বেশি ঝাপসা হতে পারে।

এবং আমি যে প্রধান সমস্যার মুখোমুখি হলাম তা হ'ল কিছু স্কোয়ারের ব্যাকগ্রাউন্ডের মতো প্রায় একই রঙ রয়েছে (প্রথম এবং দ্বিতীয় স্কোয়ারের কলাম 3 দেখুন)।

অগ্রিম ধন্যবাদ, ধারণা খুঁজছেন

হালনাগাদ :

নীচে আমি পেয়েছি সর্বোচ্চ সঠিক ফলাফল:

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

অবশ্যই, ফলাফলের চিত্রটি খানিকটা পুনরায় আকার দেওয়া হয়েছে।

আপডেট 2:

আমি নীচে আমার উত্তরে আরও অনেক ভাল সমাধান দিয়েছি: https://dsp.stackexchange.com/a/7526/818


আপনার পটভূমি সবসময় সাদা হয়?

1
আমার ধারণাটি ছিল "স্যাচুরেশন" গণনা করা এবং স্যাট ইমগের প্রান্তিককরণ করা কিন্তু আপনার উদাহরণটি ব্যবহার করে এটি খুব ভাল কাজ করে না (স্যাচুরেশনকে সর্বাধিক (আরজি, আরবি, জিবি) হিসাবে গণনা করে। কিছু স্কোয়ার প্রায় ব্যাকগ্রাউন্ডের মতো দেখায় The জিনিসটি বেশ শক্ত। যদি আপনার সমস্ত চিত্রের একই প্যাটার্ন থাকে (তার পাশের স্কোয়ারগুলির সাথে দীর্ঘ সাদা স্ট্রাইপগুলি) আপনার সর্বাধিক সহজ বিট (যেমন সত্যিই রঙিন স্কোয়ারগুলি বা সাদা স্ট্রাইপগুলি) সন্ধানের জন্য অন্যের জন্য সম্ভাব্য অবস্থানটি কমানোর বিষয়টি বিবেচনা করা উচিত স্কোয়ারগুলি এবং ... তারা সত্যই সেখানে আছে কিনা তা যাচাই করার একটি উপায় খুঁজে নিন oughএকটিই আকর্ষণীয় তবে আকর্ষণীয়! আপনি কি আরও চিত্র দিতে পারেন?

ঠিক আছে, আমি মনে করি এটি সরানো উচিত ছিল না।
জুনুক্সেক্স

1
আপনি কি আরও ছবি সরবরাহ করতে পারেন? এছাড়াও, এই জিনিস কি?
আন্দ্রে রুবস্টেইন

2
ওপিকে কিছু প্রশ্নের উত্তর দেওয়া দরকার। সম্ভবত সাদা ব্যাকগ্রাউন্ড প্রয়োজন হয় না। আর আলো নিয়ে কী? এটা কি খারাপ হতে চলেছে? এগুলি আমার কাছে কেবল অপ্রয়োজনীয় জটিলতা দেখায়।
তায়ে-শং শিন

উত্তর:


9

মতলব ব্যবহারের প্রথম প্রচেষ্টা:

im = imread('squares.jpg');
im2 = rgb2gray(im);

se = strel('disk', 15);

for i = 1:16;
    t = 60+i*5; % try out a range of bw thresholds to see what works best
    labelled = bwlabel(im2>t); % label regions in the BW image
    closed = imclose(labelled, se); % close small regions
    cleared = imclearborder(~closed,4); % clear regions touching the border
    subplot(4,4,i); 
    imshow(cleared); 
    title(['T = ' num2str(t)]);
end

নিম্নলিখিত অঞ্চলগুলিতে ফলাফল:

লেবেলযুক্ত অঞ্চল

যেমন আপনি দেখতে পাচ্ছেন, সীমাটি নির্বাচন করে যা সর্বাধিক সংখ্যক অঞ্চলের ফলাফল হয় (টি = 120) ইতিমধ্যে 7 টি সঠিক অবস্থান, কিছু সংহত স্থান, একটি মিথ্যা ধনাত্মক এবং দুটি মিথ্যা নেতিবাচক দেয়।

এটি মোটামুটি সহজ প্রচেষ্টা ছিল তবে আমি মনে করি এটি দেখায় যে পদ্ধতির কাজ করে। দীর্ঘায়িত অঞ্চলগুলি ভেঙে ফেলার জন্য কিছু স্টাফ যুক্ত করা বা প্রতিটি রঙ চ্যানেলের জন্য পৃথকভাবে এটি করা আপনার এটির উন্নতি করতে পারে এমন কয়েকটি কাজ।

আপনি আরও কয়েকটি পরীক্ষার চিত্র সরবরাহ করলে এটিও সহায়তা করবে।


8

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

পদক্ষেপ 1: যতটা সম্ভব স্কোয়ার সন্ধান করুন

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

মুখোশ চিত্র (মোট 7/12 স্কোয়ার সনাক্ত করা হয়েছে):

মুখোশ ইমেজ

পদক্ষেপ 2: স্কোয়ারগুলির একটি গ্রিড গঠন করুন

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

আদর্শ_স্কোয়ারস:

আদর্শ চিত্র

পদক্ষেপ 3: আদর্শ_চিকিত্সাটি পুনরায় সেট করুন

এখন আমাদের কাছে আদর্শ_স্কোয়ারস সেন্ট্রয়েড এবং আসল সেন্ট্রয়েড রয়েছে। আমি আদর্শ_ সেন্ট্রয়েড থেকে প্রতিটি মূল সেন্ট্রয়েডের জন্য সঠিক মিল খুঁজে পেয়েছি (তাদের মধ্যে ইউক্যালিডিয়ান দূরত্ব নিয়ে)। তারপর আমি ক্ষেপক জন্য Scipy interpolate.griddata ব্যবহার করা হয় এবং centroid মান অনুযায়ী ideal_image remapped (এটা সম্পন্ন warping যেমন প্রায় একই এইসব প্রশ্ন ও উত্তর: সুডোকু স্কোয়ারে ন্যুব্জতা অপূর্ণতা কিভাবে অপসারণ & OpenCV চিত্র রূপান্তর )। সুতরাং আউটপুট আমি পেয়েছিলাম নীচে:

আউটপুট:

আউটপুট চিত্র

পদক্ষেপ 4: বা প্রথম ধাপ থেকে মুখোশ চিত্র সহ উপরের আউটপুট পরিচালনা করুন

চূড়ান্ত আউটপুট

এখন আপনি দেখতে পাচ্ছেন যে সমস্ত স্কোয়ার সনাক্ত হয়েছে তবে নীচে উল্লিখিত একটি সমস্যা সহ:

সমস্যা:

ধাপ 3 এর আউটপুট দেখুন, অর্থাত স্কোয়ার গ্রিডের পুনরায় তৈরি চিত্র। দুটি কেন্দ্রীয় স্কোয়ার বাদে অন্য সমস্ত স্কোয়ার ক্লিপড। এই রিম্যাপিংয়ের সাথে সম্পর্কিত এটি একটি সমস্যা। Scipy.interpolate.griddata () বা cv2.remap () দিয়ে সমস্যাটি কোথায় তা আমি নিশ্চিত নই। আমি ভেবেছিলাম পুরো চিত্রটি pedদ্ধ হবে, তবে তা নয়। এটি আমাদের দেওয়া সেন্ট্রয়েডগুলির মধ্যে কেবলমাত্র চিত্রটি রেখেছে। আমি যদি এটি সংশোধন করতে পারি তবে আউটপুট ঠিক হবে।

সুতরাং কেউ যদি এর জন্য একটি ভাল ধারণা জানেন তবে সর্বাধিক স্বাগত !!!


5

দ্রষ্টব্য: এই পদ্ধতিটি সত্যিই ধীর হতে চলেছে।

একটি মাস্ক তৈরি করুন যা দেখতে কোনও আদর্শ অবজেক্টের রূপকথার মতো। এর মতো:

বস্তুর মুখোশ

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

পদ্ধতিটি ব্যাকগ্রাউন্ডে মিশ্রিত স্কোয়ারগুলিকে বা বস্তুর আংশিক পরিণতিগুলিকে মিশ্রিত করে না কারণ এটি পুরো বস্তুকে বিবেচনা করে।

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


5

পদক্ষেপ 1: আপনি বি, জি, আর, এইচ, এস, ভি প্লেনটিতে বিশ্লেষণ করে যে চূড়ান্ত বাইনারি চিত্র পেয়ে যাচ্ছেন, সেই চিত্রটিতে একটি অঙ্কুর গণনা অ্যালগরিদম করে।

পদক্ষেপ 2: অঞ্চল বা কনট্যুর দৈর্ঘ্যের ভিত্তিতে বৃহত্তম ব্লবটি সন্ধান করুন। যেহেতু আপনার ব্লবগুলি বেশিরভাগ ক্ষেত্র সমান্তরালগ্রাম হবে তাই অঞ্চল বা কনট্যুর, যে কোনও একটি এটি করবে।

পদক্ষেপ 3: বৃহত্তম ব্লব সহ (যেহেতু বৃহত্তম ব্লবটি আপনার আসল বিশ্বের স্কোয়ারগুলির অনুরূপ সেরা ব্লব) ব্লবটির ওরিয়েন্টেশন খোঁজার চেষ্টা করুন ... এটি আপনি একটি ফিটের সাথে সেরা ফিটের আয়তক্ষেত্রটি পেতে পারেন বা কোণার পয়েন্টগুলি পেতে পারেন ... লাইনগুলির theালুটি তাদের সাথে যোগ দিন (দিগন্ত এবং উল্লম্ব দিক উভয়)।

চতুর্থ ধাপ: একবার আপনি দুটি opালু দুটি আঁকুনের অক্ষের মধ্য দিয়ে চলতে শুরু করুন। অক্ষের জন্য আপনি কোণার পয়েন্টগুলি গড় করতে পারেন বা আপনি সেন্ট্রয়েড (ভর কেন্দ্রে) ব্যবহার করতে পারেন ... আমি গড় কোণার পয়েন্ট দিয়ে যেতে পারি ...

পদক্ষেপ 5: যেহেতু প্রতিটি অনুভূমিক এবং উল্লম্ব দিকের মধ্যে ব্যবধান সমান হয় (আদর্শভাবে অনুভূমিক এবং উল্লম্ব ব্যবধানটিও সমান যেমন এটি আপনার আদর্শ বর্গক্ষেত্রের চিত্র থেকে আসে তবে আমরা এটি ধরে নেব না)) কেবল অন্যটির সম্ভাব্য সেন্ট্রয়েডগুলি সনাক্ত করতে হবে parallelograms

নীচের লাইন: কোনও একটি বর্গ নিখুঁতভাবে সনাক্ত হয়ে গেলে আপনি পুরো গ্রিডটি তৈরি করতে পারেন। সবচেয়ে বড় ব্লবের অনুভূমিক অক্ষ বরাবর এবং 2 টি (একটি বৃহত্ ব্ল্বের উল্লম্ব উচ্চতা) এর বিরতিতে 2 টি (একটি বড় ব্লবের অনুভূমিক প্রস্থ) এর বিরতিতে কেবল কেন্দ্রগুলি চিহ্নিত রাখুন the

সমর্থন কিছু ছবি এখানে চিত্র বর্ণনা লিখুন

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


1
+1 - আপনি যদি এটি প্রয়োগ করতে পারেন তবে দুর্দান্ত হবে।
আবিদ রহমান কে

2
@ অ্যাবিডআরহমানকে স্ট্যাকএক্সচেঞ্জের জন্য এটি নয়। প্রশ্ন -> উত্তর। অন্যথায় এটি একটি কাজের মেলা হিসাবে শেষ হবে।
জান ক্রুগার

2

এই ব্যবস্থা স্থির

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

তারপরে, আপনার পুরো স্কোয়ারের মধ্যে সর্বাধিক সাধারণ রঙ সনাক্ত করার চেষ্টা করুন এবং এটি একটি "অ-স্কোয়ার" অঞ্চলে সেট করুন। বাকিগুলি আপনি যে স্কোয়ারগুলি সন্ধান করছেন তা হ'ল।


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

কিছু স্কোয়ারের ব্যাকগ্রাউন্ডের মতো রঙ প্রায় একই রকম। সুতরাং আমি ভীত, তারাও আপনার পদ্ধতি অনুসারে অ-বর্গক্ষেত্র অঞ্চল হিসাবে বিবেচিত হবে।
আবিদ রহমান কে

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

এটি ঠিক প্রান্ত সনাক্তকরণ, তাই না? আমি চেষ্টা করেছিলাম, তবে ভাল ফল পাইনি।
আবিদ রহমান কে

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

0

আমি হফ ট্রান্সফর্ম ব্যবহার করার পরামর্শ দিচ্ছি, যা সাধারণ প্যারাম্যাট্রিক আকারগুলি যেমন লাইন, বৃত্ত ইত্যাদি সন্ধান করার জন্য একটি খুব শক্তিশালী অ্যালগরিদম lines লাইন সনাক্তকরণ আপনার ক্ষেত্রে সবচেয়ে ভাল। আপনি কমপক্ষে দীর্ঘ সাদা স্ট্রিপগুলির পক্ষে খুঁজে পেতে পারেন; তারপরে, কোনও কোণার এক্সট্রাক্টর অ্যালগরিদম (হ্যারিস বা সম্ভবত SIFT বা SURF) এর সাহায্যে আপনি এই রেখাগুলি বরাবর কোণগুলি খুঁজে পেতে পারেন, এমনকি স্কোয়ারগুলি প্রায় সমান ব্যবধানে রয়েছে তা ব্যবহার করে।


0

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

কোড: https://github.com/rbhambriiit/computer_vision/blob/master/find_color_boxএখানে চিত্র বর্ণনা লিখুন

[1 বাক্স মিস করেছেন তবে তা মাস্কিং ফাংশনটি টিউন করেই করা উচিত]

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