ভূমিকা
থ্রেশহোল্ডিং হল একটি সহজ এবং কার্যকরী কৌশল যা একটি ছবিতে মৌলিক বিভাজন সঞ্চালন করতে এবং এটিকে বাইনারি করতে (এটিকে একটি বাইনারি ছবিতে পরিণত করুন) যেখানে পিক্সেল হয় 0
or 1
(অথবা 255
যদি আপনি তাদের প্রতিনিধিত্ব করতে পূর্ণসংখ্যা ব্যবহার করছেন)।
সাধারণত, আপনি একটি চিত্রে সাধারণ পটভূমি-পুরোভাগ বিভাজন সম্পাদন করতে থ্রেশহোল্ডিং ব্যবহার করতে পারেন এবং এটি প্রতিটি পিক্সেলের জন্য একটি সাধারণ কৌশলে বৈকল্পিকগুলিতে ফুটে ওঠে:
if pixel_value > threshold:
pixel_value = MAX
else:
pixel_value = 0
সরল থ্রেশহোল্ডিং-এ উজ্জ্বল সমস্যা রয়েছে এবং এর জন্য মোটামুটি প্রাথমিক ইনপুট প্রয়োজন, যা এটিকে অনেক ব্যবহারের ক্ষেত্রে ব্যবহারিক নয়। প্রধান অপরাধী হল একটি গ্লোবাল থ্রেশহোল্ড যা সমগ্র ছবিতে প্রয়োগ করা হয়, যেখানে ছবিগুলি কম্বল থ্রেশহোল্ডগুলি কাজ করার জন্য খুব কমই সমান হয়, যদি না সেগুলি কৃত্রিম হয়৷
একটি গ্লোবাল থ্রেশহোল্ড স্ক্যান করা পৃষ্ঠাগুলিতে একটি কালো এবং সাদা বইয়ের অক্ষরগুলিকে আলাদা করতে ভাল কাজ করবে। একটি গ্লোবাল থ্রেশহোল্ড খুব সম্ভবত একই পৃষ্ঠার একটি ফোন ছবিতে ব্যর্থ হবে, যেহেতু পৃষ্ঠার অংশগুলির মধ্যে আলোর অবস্থা পরিবর্তনশীল হতে পারে, যা একটি বিশ্বব্যাপী কাট-অফ পয়েন্টকে বাস্তব ডেটার জন্য খুব সংবেদনশীল করে তোলে।
এটি মোকাবেলা করতে - আমরা নিয়োগ করতে পারি স্থানীয় থ্রেশহোল্ড, নামে পরিচিত একটি কৌশল ব্যবহার করে অভিযোজিত থ্রেশহোল্ডিং. চিত্রের সমস্ত অংশকে একই নিয়মের সাথে চিকিত্সা করার পরিবর্তে, আমরা প্রতিটির জন্য থ্রেশহোল্ড পরিবর্তন করতে পারি স্থানীয় যে এটা জন্য উপযুক্ত বলে মনে হচ্ছে. এটি থ্রেশহোল্ডিংকে আলো, শব্দ এবং অন্যান্য কারণের পরিবর্তনের জন্য আংশিকভাবে অপরিবর্তনীয় করে তোলে। যদিও গ্লোবাল থ্রেশহোল্ডিংয়ের চেয়ে অনেক বেশি দরকারী, থ্রেশহোল্ডিং নিজেই একটি সীমিত, কঠোর কৌশল, এবং বিভাজন না করে ইমেজ প্রিপ্রসেসিং (বিশেষত যখন এটি বাতিল করার জন্য চিত্রগুলি সনাক্ত করার ক্ষেত্রে আসে) সাহায্যের জন্য সর্বোত্তম প্রয়োগ করা হয়।
আরও সূক্ষ্ম অ্যাপ্লিকেশনগুলির জন্য যেগুলির জন্য প্রসঙ্গ প্রয়োজন, আপনি গভীর শিক্ষা সহ আরও উন্নত কৌশলগুলি ব্যবহার করা ভাল, যা কম্পিউটার দৃষ্টিতে সাম্প্রতিক অগ্রগতিগুলিকে চালিত করছে৷
OpenCV সহ অভিযোজিত থ্রেশহোল্ডিং
চলুন পরিবর্তনশীল লাইটিং কন্ডিশন সহ একটি ছবিতে লোড করা যাক, যেখানে ছবির একটি অংশ অন্যটির থেকে বেশি ফোকাসে থাকে, ছবিটি একটি কোণ থেকে নেওয়া হয়। হ্যারল্ড ম্যাকগির তোলা একটি ছবি "খাদ্য এবং রান্নার উপর" মহান পরিবেশন করা হবে!
img = cv2.imread('book.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
এখন, নিয়মিত থ্রেশহোল্ডিং ব্যবহার করে, আমরা পটভূমি থেকে অক্ষরগুলিকে আলাদা করার চেষ্টা করতে পারি, যেহেতু তাদের মধ্যে একটি স্পষ্ট রঙের পার্থক্য রয়েছে। সমস্ত কাগজ-রং পটভূমি হিসাবে গণ্য করা হবে। যেহেতু আমরা সত্যিই জানি না যে থ্রেশহোল্ডটি কী হওয়া উচিত – আসুন একটি ভাল মান খুঁজে পেতে ওটসুর পদ্ধতিটি প্রয়োগ করি, অনুমান করে যে চিত্রটি কিছুটা দ্বি-মডেল (বেশিরভাগ দুটি রঙ দ্বারা প্রভাবিত):
img = cv2.imread('book.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)
ret, mask = cv2.threshold(blurred, 0, 255, cv2.THRESH_OTSU)
print(f'Threshold: {ret}')
fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))
চলুন দেখে নেওয়া যাক ফলাফল:
আউচ। পাঠ্যের বাম অংশটি প্রধানত বিবর্ণ, নর্দমার চারপাশের ছায়া ছবিটির একটি অংশ সম্পূর্ণরূপে খেয়ে ফেলেছে এবং পাঠ্যটি খুব পরিপূর্ণ! এটি "বন্যের মধ্যে" একটি চিত্র, এবং গ্লোবাল থ্রেশহোল্ডিংয়ের মতো কম্বল নিয়মগুলি ভাল কাজ করে না। থ্রেশহোল্ড কি হওয়া উচিত? এটা ছবির অংশের উপর নির্ভর করে!
সার্জারির cv2.adaptiveThreshold()
পদ্ধতি আমাদের ঠিক এটি করতে অনুমতি দেয়:
cv2.adaptiveThreshold(img,
max_value,
adaptive_method,
threshold_method,
block_size,
C)
সার্জারির adaptive_method
হতে পারে একটি cv2.ADAPTIVE_THRESH_MEAN_C
or cv2.ADAPTIVE_THRESH_GAUSSIAN_C
, কোথায় C
আপনার সেট করা শেষ যুক্তি। এই উভয় পদ্ধতিই প্রশ্নে থাকা পিক্সেলের প্রতিবেশীদের অনুসারে প্রান্তিক গণনা করে, যেখানে block_size
বিবেচনা করা প্রতিবেশীর সংখ্যা নির্দেশ করে (প্রতিবেশীর এলাকা)।
ADAPTIVE_THRESH_MEAN_C
প্রতিবেশীদের গড় নেয় এবং বাদ দেয়C
যখনADAPTIVE_THRESH_GAUSSIAN_C
প্রতিবেশীদের গাউসিয়ান-ভারিত যোগফল নেয় এবং বাদ দেয়C
.
সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!
এটি আপনাকে একটি বাইনারাইজেশন কৌশল সেট করার অনুমতি দেয়, তবে এটি সীমাবদ্ধ THRESH_BINARY
এবং THRESH_BINARY_INV
, এবং তাদের মধ্যে পরিবর্তন কার্যকরভাবে কি "ব্যাকগ্রাউন্ড" এবং কি "ফোরগ্রাউন্ড" পরিবর্তন করবে।
পদ্ধতিটি শুধু ছবির জন্য মাস্ক ফেরত দেয় - রিটার্ন কোড এবং মাস্ক নয়। চলুন অভিযোজিত থ্রেশহোল্ডিং ব্যবহার করে, আগের মতো একই চিত্রের অক্ষরগুলিকে ভাগ করার চেষ্টা করি:
img = cv2.imread('book.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)
mask = cv2.adaptiveThreshold(blurred,
255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY,
31,
10)
fig, ax = plt.subplots(1, 2, figsize=(12, 5))
ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
ax[1].imshow(cv2.cvtColor(mask, cv2.COLOR_BGR2RGB))
plt.tight_layout()
এর ফলে আরও পরিষ্কার চিত্র পাওয়া যায়:
বিঃদ্রঃ: সার্জারির block_size
যুক্তি একটি অসম সংখ্যা হতে হবে.
অনেকটা একইভাবে, আমরা গাউসিয়ান থ্রেশহোল্ডিং প্রয়োগ করতে পারি:
mask = cv2.adaptiveThreshold(blurred,
255,
cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY,
31,
10)
যা শেষ পর্যন্ত একটি সুন্দর সন্তোষজনক চিত্র তৈরি করে:
উভয় ব্লক আকার (প্রতিবেশী এলাকা) এবং C
এখানে টিউন করার জন্য হাইপারপ্যারামিটার। বিভিন্ন মান ব্যবহার করে দেখুন এবং আপনার ছবিতে সবচেয়ে ভালো কাজ করে এমন একটি বেছে নিন। সাধারণভাবে, গাউসিয়ান থ্রেশহোল্ডিং শব্দের প্রতি কম সংবেদনশীল এবং কিছুটা ব্লাকার, ক্লিনার ইমেজ তৈরি করবে, কিন্তু এটি পরিবর্তিত হয় এবং ইনপুটের উপর নির্ভর করে।
অভিযোজিত থ্রেশহোল্ডিংয়ের সীমাবদ্ধতা
অভিযোজিত থ্রেশহোল্ডিংয়ের সাথে, আমরা থ্রেশহোল্ডিংয়ের অত্যধিক সীমাবদ্ধতা এড়াতে সক্ষম হয়েছি, তবে এটি এখনও তুলনামূলকভাবে কঠোর এবং রঙিন ইনপুটগুলির জন্য দুর্দান্ত কাজ করে না। উদাহরণস্বরূপ, যদি আমরা কাঁচির একটি চিত্র এবং ভিন্ন রঙের একটি ছোট কিট লোড করি, এমনকি অভিযোজিত থ্রেশহোল্ডিংয়ের ক্ষেত্রেও এটিকে সঠিকভাবে ভাগ করতে সমস্যা হবে, নির্দিষ্ট অন্ধকার বৈশিষ্ট্যগুলির রূপরেখা দেওয়া হয়েছে, কিন্তু সম্পূর্ণ বস্তুগুলিকে বিবেচনা করা ছাড়াই:
যদি আমরা ব্লক আকার tweak এবং C
, আমরা এটিকে একই বস্তুর অংশ হিসাবে বৃহত্তর প্যাচ হিসাবে বিবেচনা করতে পারি, কিন্তু তারপরে প্রতিবেশী মাপ তৈরিতে সমস্যায় পড়তে পারি খুব বিশ্বব্যাপী, গ্লোবাল থ্রেশহোল্ডিংয়ের সাথে একই অত্যধিক সমস্যাগুলিতে ফিরে আসা:
উপসংহার
সাম্প্রতিক বছরগুলিতে, বাইনারি সেগমেন্টেশন (যেমন আমরা এখানে করেছি) এবং মাল্টি-লেবেল সেগমেন্টেশন (যেখানে আপনার ইচ্ছামত সংখ্যক ক্লাস এনকোড করা থাকতে পারে) সফলভাবে গভীর শিক্ষার নেটওয়ার্কগুলির সাথে মডেল করা হয়েছে, যা অনেক বেশি শক্তিশালী এবং নমনীয়। উপরন্তু, তারা যে ছবিগুলিকে সেগমেন্ট করছে তাতে তারা বিশ্বব্যাপী এবং স্থানীয় প্রসঙ্গ এনকোড করতে পারে। নেতিবাচক দিক হল - তাদের প্রশিক্ষণের জন্য আপনার ডেটার পাশাপাশি সময় এবং দক্ষতার প্রয়োজন।
অন-দ্য-ফ্লাই, সহজ থ্রেশহোল্ডিংয়ের জন্য, আপনি OpenCV ব্যবহার করতে পারেন এবং গ্লোবাল থ্রেশহোল্ডিং কৌশলগুলির পরিবর্তে অভিযোজিত থ্রেশহোল্ডিং ব্যবহার করে কিছু সীমাবদ্ধতার সাথে লড়াই করতে পারেন। সঠিক, উৎপাদন-স্তরের বিভাজনের জন্য, আপনি নিউরাল নেটওয়ার্ক ব্যবহার করতে চাইবেন।
আরও এগিয়ে যাওয়া - কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা
আপনার অনুসন্ধিৎসু প্রকৃতি আপনাকে আরও যেতে চায়? আমরা আমাদের চেক আউট সুপারিশ পথ: "পাইথনের সাথে কম্পিউটার ভিশনের জন্য ব্যবহারিক গভীর শিক্ষা".
আরেকটি কম্পিউটার ভিশন কোর্স?
আমরা MNIST সংখ্যা বা MNIST ফ্যাশনের শ্রেণিবিন্যাস করব না। তারা অনেক আগে থেকেই তাদের দায়িত্ব পালন করেছে। উন্নত ব্ল্যাক-বক্স আর্কিটেকচারগুলিকে পারফরম্যান্সের ভার বহন করতে দেওয়ার আগে অনেকগুলি শেখার সংস্থান মৌলিক ডেটাসেট এবং মৌলিক আর্কিটেকচারের উপর ফোকাস করছে।
আমরা ফোকাস করতে চাই demystification, বাস্তবতা, বোধশক্তি, স্বজ্ঞা এবং বাস্তব প্রকল্প. শিখতে চাই কিভাবে আপনি একটি পার্থক্য করতে পারেন? স্তন ক্যান্সারের জন্য আমাদের মস্তিষ্ক যেভাবে ছবিগুলিকে প্রক্রিয়াকরণ করে, তার থেকে শুরু করে স্তন ক্যান্সারের জন্য একটি গবেষণা-গ্রেড ডিপ লার্নিং ক্লাসিফায়ার লেখা পর্যন্ত আমরা আপনাকে "হ্যালুসিনেট" করার নেটওয়ার্কগুলিতে নিয়ে যাব, আপনাকে ব্যবহারিক কাজের মাধ্যমে নীতি ও তত্ত্ব শেখাবো, আপনাকে সজ্জিত করব কম্পিউটারের দৃষ্টিভঙ্গি সমাধানের জন্য গভীর শিক্ষা প্রয়োগে বিশেষজ্ঞ হওয়ার উপায় এবং সরঞ্জাম।
ভিতরে কি?
- দৃষ্টির প্রথম নীতি এবং কীভাবে কম্পিউটারকে "দেখতে" শেখানো যায়
- কম্পিউটার ভিশনের বিভিন্ন কাজ এবং অ্যাপ্লিকেশন
- ট্রেডের টুল যা আপনার কাজকে সহজ করে তুলবে
- কম্পিউটার ভিশনের জন্য ডেটাসেট খোঁজা, তৈরি এবং ব্যবহার করা
- কনভোল্যুশনাল নিউরাল নেটওয়ার্কের তত্ত্ব এবং প্রয়োগ
- ডেটাসেটে ডোমেন শিফট, সহ-ঘটনা এবং অন্যান্য পক্ষপাতগুলি পরিচালনা করা
- আপনার সুবিধার জন্য শেখার স্থানান্তর এবং অন্যদের প্রশিক্ষণের সময় এবং গণনামূলক সংস্থানগুলি ব্যবহার করুন
- একটি অত্যাধুনিক স্তন ক্যান্সারের শ্রেণীবিভাগ তৈরি এবং প্রশিক্ষণ
- কীভাবে মূলধারার ধারণাগুলিতে সংশয়বাদের একটি স্বাস্থ্যকর ডোজ প্রয়োগ করা যায় এবং ব্যাপকভাবে গৃহীত কৌশলগুলির প্রভাব বোঝা যায়
- T-SNE এবং PCA ব্যবহার করে একটি ConvNet-এর "ধারণা স্থান" ভিজ্যুয়ালাইজ করা
- কোম্পানিগুলি কীভাবে ভাল ফলাফল অর্জন করতে কম্পিউটার দৃষ্টি কৌশল ব্যবহার করে তার কেস স্টাডি
- সঠিক মডেল মূল্যায়ন, সুপ্ত স্থান ভিজ্যুয়ালাইজেশন এবং মডেলের মনোযোগ সনাক্তকরণ
- ডোমেন গবেষণা সম্পাদন করা, আপনার নিজস্ব ডেটাসেট প্রক্রিয়াকরণ এবং মডেল পরীক্ষা স্থাপন করা
- অত্যাধুনিক স্থাপত্য, ধারণাগুলির অগ্রগতি, কী সেগুলিকে অনন্য করে তোলে এবং কীভাবে সেগুলি বাস্তবায়ন করা যায়
- KerasCV – একটি আধুনিক পাইপলাইন এবং মডেল তৈরি করার জন্য একটি WIP লাইব্রেরি
- কিভাবে পার্স এবং পেপার পড়ুন এবং সেগুলি নিজেই প্রয়োগ করুন
- আপনার আবেদনের উপর নির্ভর করে মডেল নির্বাচন করুন
- এন্ড-টু-এন্ড মেশিন লার্নিং পাইপলাইন তৈরি করা
- দ্রুত আর-সিএনএন, রেটিনানেট, এসএসডি এবং ইওলোর সাহায্যে অবজেক্ট সনাক্তকরণের উপর ল্যান্ডস্কেপ এবং অন্তর্দৃষ্টি
- উদাহরণ এবং শব্দার্থিক বিভাজন
- YOLOv5 এর সাথে রিয়েল-টাইম অবজেক্ট রিকগনিশন
- YOLOv5 অবজেক্ট ডিটেক্টর প্রশিক্ষণ
- KerasNLP ব্যবহার করে ট্রান্সফরমারের সাথে কাজ করা (শিল্প-শক্তি WIP লাইব্রেরি)
- চিত্রের ক্যাপশন তৈরি করতে ConvNets-এর সাথে ট্রান্সফরমার একীভূত করা
- ডিপড্রিম
- কম্পিউটার ভিশনের জন্য ডিপ লার্নিং মডেল অপ্টিমাইজেশান