Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

Cv2.threshold() کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ

تعارف

تھریشولڈنگ ایک سادہ اور موثر تکنیک ہے جو کسی تصویر میں بنیادی سیگمنٹیشن کو انجام دیتی ہے، اور اسے بائنرائز کرتی ہے (اسے بائنری امیج میں بدل دیتی ہے) جہاں پکسلز یا تو ہوتے ہیں۔ 0 or 1 (یا 255 اگر آپ انٹیجرز کو ان کی نمائندگی کے لیے استعمال کر رہے ہیں)۔

عام طور پر، آپ کسی تصویر میں سادہ پس منظر کے پیش منظر کی تقسیم کو انجام دینے کے لیے تھریشولڈنگ کا استعمال کر سکتے ہیں، اور یہ ہر پکسل کے لیے ایک سادہ تکنیک پر مختلف حالتوں میں ابلتا ہے:

if pixel_value > threshold:
    pixel_value = MAX
else:
    pixel_value = 0

یہ ضروری عمل کے طور پر جانا جاتا ہے بائنری تھریشولڈنگ. اب - مختلف طریقے ہیں جن سے آپ اس عمومی خیال کو موافقت دے سکتے ہیں، بشمول آپریشنز کو تبدیل کرنا (سوئچ کرنا > a کے ساتھ دستخط کریں۔ < نشانی)، ترتیب دینا pixel_value کرنے کے لئے threshold زیادہ سے زیادہ قدر/0 کی بجائے (جسے ترنکیٹنگ کہا جاتا ہے)، کو برقرار رکھنا pixel_value خود اگر یہ اوپر ہے threshold یا اگر یہ نیچے ہے۔ threshold.

ان سب کو آسانی سے OpenCV میں لاگو کیا گیا ہے جیسا کہ:

  • cv2.THRESH_BINARY
  • cv2.THRESH_BINARY_INV
  • cv2.THRESH_TRUNC
  • cv2.THRESH_TOZERO
  • cv2.THRESH_TOZERO_INV

… بالترتیب یہ نسبتاً "بے ہودہ" طریقے ہیں کہ ارے کافی آسان ہیں، تصویروں میں سیاق و سباق کا حساب نہ لگائیں، جانیں کہ کون سی شکلیں عام ہیں، وغیرہ۔ تکنیک

اب، یہاں تک کہ "بولی" طریقوں کے ساتھ - کچھ اچھی دہلیز تلاش کرنے کے لیے ہیورسٹکس کو لاگو کیا جا سکتا ہے، اور ان میں اوٹسو طریقہ اور مثلث کا طریقہ شامل ہے:

  • cv2.THRESH_OTSU
  • cv2.THRESH_TRIANGLE

نوٹ: اوپن سی وی تھریشولڈنگ ایک ابتدائی تکنیک ہے، اور یہ روشنی کی تبدیلیوں اور میلان، رنگوں کی نسبت، وغیرہ کے لیے حساس ہے۔ یہ نسبتاً صاف تصویروں پر بہترین طور پر لاگو ہوتا ہے، شور کو کم کرنے کے لیے ان کو دھندلا کرنے کے بعد، ان اشیاء میں رنگ کی تبدیلی کے بغیر جن کو آپ تقسیم کرنا چاہتے ہیں۔

ایک ہی حد کی قیمت کے ساتھ بنیادی حد کے ساتھ کچھ مسائل پر قابو پانے کا دوسرا طریقہ استعمال کرنا ہے انکولی حد جو عالمی سطح کے بجائے ایک تصویر میں ہر چھوٹے خطے پر ایک حد کی قدر کا اطلاق کرتا ہے۔

OpenCV کے ساتھ سادہ تھریشولڈنگ

OpenCV کے Python API میں تھریشولڈنگ کے ذریعے کی جاتی ہے۔ cv2.threshold() طریقہ - جو ایک تصویر کو قبول کرتا ہے (NumPy سرنی، جو عدد کے ساتھ پیش کیا جاتا ہے)، حد، زیادہ سے زیادہ قدر اور حد بندی کا طریقہ (کیسے threshold اور maximum_value استعمال کیا جاتا ہے):

img = cv2.imread('objects.jpg')

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


blurred = cv2.GaussianBlur(img, (7, 7), 0)

ret, img_masked = cv2.threshold(blurred, 220, 255, cv2.THRESH_BINARY)

واپسی کوڈ صرف لاگو کردہ حد ہے:

print(f"Threshold: {ret}") 

یہاں، چونکہ حد ہے۔ 220 اور ہم نے استعمال کیا ہے۔ THRESH_BINARY طریقہ - اوپر ہر پکسل کی قیمت 220 تک بڑھا دیا جائے گا۔ 255جبکہ ہر پکسل کی قیمت نیچے ہے۔ 220 تک کم کر دیا جائے گا۔ 0, پیش منظر کی اشیاء کو ڈھکنے والے "ماسک" کے ساتھ ایک سیاہ اور سفید تصویر بنانا۔

220 کیوں؟ یہ جاننا کہ تصویر کیسی دکھتی ہے آپ کو اس بارے میں کچھ تخمینی اندازے لگانے کی اجازت دیتی ہے کہ آپ کس حد کا انتخاب کر سکتے ہیں۔ عملی طور پر، آپ شاذ و نادر ہی ایک دستی حد مقرر کرنا چاہیں گے، اور ہم ایک لمحے میں خودکار حد کے انتخاب کا احاطہ کریں گے۔

آئیے نتیجہ پلاٹ کریں! اوپن سی وی ونڈوز تھوڑی مشکل ہو سکتی ہیں، لہذا ہم Matplotlib کا استعمال کرتے ہوئے اصل تصویر، دھندلی تصویر اور نتائج کو پلاٹ کریں گے:

fig, ax = plt.subplots(1, 3, figsize=(12, 8))
ax[0].imshow(img)
ax[1].imshow(blurred)
ax[2].imshow(img_masked)

حد بندی کے طریقے

جیسا کہ پہلے ذکر کیا گیا ہے، آپ فنکشن میں حد اور زیادہ سے زیادہ قدر استعمال کرنے کے مختلف طریقے ہیں۔ ہم نے ابتدائی طور پر بائنری تھریشولڈ پر ایک نظر ڈالی ہے۔ آئیے طریقوں کی ایک فہرست بنائیں، اور نتائج کی منصوبہ بندی کرتے ہوئے ان کو ایک ایک کرکے لاگو کریں:

methods = [cv2.THRESH_BINARY, cv2.THRESH_BINARY_INV, cv2.THRESH_TRUNC, cv2.THRESH_TOZERO, cv2.THRESH_TOZERO_INV]
names = ['Binary Threshold', 'Inverse Binary Threshold', 'Truncated Threshold', 'To-Zero Threshold', 'Inverse To-Zero Threshold']

def thresh(img_path, method, index):
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    blurred = cv2.GaussianBlur(img, (7, 7), 0)
    ret, img_masked = cv2.threshold(blurred, 220, 255, method)

    fig, ax = plt.subplots(1, 3, figsize=(12, 4))
    fig.suptitle(names[index], fontsize=18)
    ax[0].imshow(img)
    ax[1].imshow(blurred)
    ax[2].imshow(img_masked)
    plt.tight_layout()

for index, method in enumerate(methods):
    thresh('coins.jpeg', method, index)

THRESH_BINARY اور THRESH_BINARY_INV ایک دوسرے کے معکوس ہیں، اور درمیان میں ایک تصویر کو بائنرائز کرتے ہیں۔ 0 اور 255، انہیں بالترتیب پس منظر اور پیش منظر میں تفویض کرنا، اور اس کے برعکس۔

THRESH_TRUNC کے درمیان تصویر کو بائنرائز کرتا ہے۔ threshold اور 255.

THRESH_TOZERO اور THRESH_TOZERO_INV کے درمیان binarize 0 اور موجودہ پکسل ویلیو (src(x, y))۔ آئیے نتیجے میں آنے والی تصاویر پر ایک نظر ڈالتے ہیں:

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی
Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی
Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی
Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

یہ طریقے کافی بدیہی ہیں - لیکن، ہم ایک اچھی حد کی قدر کو کیسے خودکار کر سکتے ہیں، اور "اچھی حد" قدر کا کیا مطلب ہے؟ اب تک کے زیادہ تر نتائج میں غیر مثالی ماسک تھے، ان میں نشانات اور دھبے تھے۔ یہ سککوں کی عکاس سطحوں میں فرق کی وجہ سے ہوتا ہے - وہ یکساں رنگ کے نہیں ہوتے ہیں اس فرق کی وجہ سے کہ چھالیں روشنی کو کیسے منعکس کرتی ہیں۔

ہم، ایک حد تک، ایک بہتر عالمی حد تلاش کرکے اس سے لڑ سکتے ہیں۔

OpenCV کے ساتھ خودکار/آپٹمائزڈ تھریشولڈنگ

اوپن سی وی دو موثر عالمی حد تلاش کرنے کے طریقے استعمال کرتا ہے – اوٹسو کا طریقہ، اور مثلث کا طریقہ۔

اوٹسو کا طریقہ یہ مانتا ہے کہ یہ کام کر رہا ہے۔ دو ماڈل تصاویر بائی موڈل امیجز وہ امیجز ہیں جن کے کلر ہسٹوگرام میں صرف دو چوٹیاں ہوتی ہیں (یعنی صرف دو الگ الگ پکسل ویلیو ہوتی ہیں)۔ اس بات پر غور کرتے ہوئے کہ چوٹیاں ہر ایک طبقے سے تعلق رکھتی ہیں جیسے کہ "پس منظر" اور "پیش منظر" – مثالی حد ان کے عین درمیان ہے۔

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی
تصویر کریڈٹ: https://scipy-lectures.org/

آپ گاوسی بلرز کے ساتھ کچھ تصاویر کو مزید دو ماڈل بنا سکتے ہیں، لیکن تمام نہیں۔

ایک متبادل، اکثر بہتر کارکردگی کا مظاہرہ کرنے والا الگورتھم مثلث الگورتھم ہے، جو گرے لیول ہسٹوگرام کے زیادہ سے زیادہ اور کم از کم کے درمیان فاصلے کا حساب لگاتا ہے اور ایک لکیر کھینچتا ہے۔ وہ نقطہ جس پر وہ لائن باقی ہسٹوگرام سے زیادہ سے زیادہ دور ہے اسے ٹریشولڈ کے طور پر منتخب کیا جاتا ہے:

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

یہ دونوں ایک گرے اسکیلڈ امیج فرض کرتے ہیں، لہذا ہمیں ان پٹ امیج کو گرے میں تبدیل کرنے کی ضرورت ہوگی cv2.cvtColor():

img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

ret, mask1 = cv2.threshold(blurred, 0, 255, cv2.THRESH_OTSU)
ret, mask2 = cv2.threshold(blurred, 0, 255, cv2.THRESH_TRIANGLE)

masked = cv2.bitwise_and(img, img, mask=mask1)

آئیے تصویر کو دونوں طریقوں سے چلائیں اور نتائج کو دیکھیں:

methods = [cv2.THRESH_OTSU, cv2.THRESH_TRIANGLE]
names = ['Otsu Method', 'Triangle Method']

def thresh(img_path, method, index):
    img = cv2.imread(img_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    blurred = cv2.GaussianBlur(gray, (7, 7), 0)

    ret, img_masked = cv2.threshold(blurred, 0, 255, method)
    print(f"Threshold: {ret}")

    fig, ax = plt.subplots(1, 3, figsize=(12, 5))
    fig.suptitle(names[index], fontsize=18)
    ax[0].imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    ax[1].imshow(cv2.cvtColor(gray, cv2.COLOR_BGR2RGB))
    ax[2].imshow(cv2.cvtColor(img_masked, cv2.COLOR_BGR2RGB))

for index, method in enumerate(methods):
    thresh('coins.jpeg', method, index)

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی
Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

یہاں، مثلث کا طریقہ Otsu کے طریقہ کار کو بہتر بناتا ہے، کیونکہ تصویر دو ماڈل نہیں ہے:

import numpy as np

img = cv2.imread('coins.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (7, 7), 0)

histogram_gray, bin_edges_gray = np.histogram(gray, bins=256, range=(0, 255))
histogram_blurred, bin_edges_blurred = np.histogram(blurred, bins=256, range=(0, 255))

fig, ax = plt.subplots(1, 2, figsize=(12, 4))

ax[0].plot(bin_edges_gray[0:-1], histogram_gray)
ax[1].plot(bin_edges_blurred[0:-1], histogram_blurred)

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

تاہم، یہ واضح ہے کہ مثلث کا طریقہ کس طرح تصویر کے ساتھ کام کرنے اور زیادہ اطمینان بخش نتیجہ پیدا کرنے کے قابل تھا۔

اوپن سی وی تھریشولڈنگ کی حدود

OpenCV کے ساتھ حد بندی آسان، آسان اور موثر ہے۔ پھر بھی، یہ کافی حد تک محدود ہے۔ جیسے ہی آپ رنگین عناصر، غیر یکساں پس منظر اور بدلتے ہوئے روشنی کے حالات متعارف کراتے ہیں - ایک تصور کے طور پر عالمی حد بندی بہت سخت ہو جاتی ہے۔

امیجز عام طور پر بہت پیچیدہ ہوتی ہیں کہ ایک ہی دہلیز کافی ہو، اور اسے جزوی طور پر حل کیا جا سکتا ہے۔ انکولی حد، جہاں ایک عالمی حد کے بجائے کئی مقامی حدیں لاگو کی جاتی ہیں۔ محدود ہونے کے باوجود، انکولی تھریشولڈنگ عالمی حد سے کہیں زیادہ لچکدار ہے۔

نتیجہ

حالیہ برسوں میں، بائنری سیگمنٹیشن (جیسا کہ ہم نے یہاں کیا) اور ملٹی لیبل سیگمنٹیشن (جہاں آپ کو کلاسوں کی صوابدیدی تعداد انکوڈ کی جا سکتی ہے) کو ڈیپ لرننگ نیٹ ورکس کے ساتھ کامیابی کے ساتھ ماڈل بنایا گیا ہے، جو بہت زیادہ طاقتور اور لچکدار ہیں۔ اس کے علاوہ، وہ ان تصاویر میں عالمی اور مقامی سیاق و سباق کو انکوڈ کر سکتے ہیں جنہیں وہ تقسیم کر رہے ہیں۔ منفی پہلو یہ ہے کہ آپ کو ان کی تربیت کے لیے ڈیٹا کے ساتھ ساتھ وقت اور مہارت کی ضرورت ہے۔

پرواز کے دوران، سادہ حد کے لیے، آپ OpenCV استعمال کر سکتے ہیں۔ درست، پیداواری سطح کی تقسیم کے لیے، آپ عصبی نیٹ ورک استعمال کرنا چاہیں گے۔

مزید جانا - کمپیوٹر وژن کے لیے عملی گہری تعلیم

آپ کی جستجو کرنے والی فطرت آپ کو مزید آگے بڑھنا چاہتی ہے؟ ہم اپنے کو چیک کرنے کی تجویز کرتے ہیں۔ کورس: "Python کے ساتھ کمپیوٹر وژن کے لیے عملی گہری تعلیم".

Cv2.threshold() PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ ازگر میں اوپن سی وی تھریشولڈنگ۔ عمودی تلاش۔ عی

ایک اور کمپیوٹر وژن کورس؟

ہم MNIST ہندسوں یا MNIST فیشن کی درجہ بندی نہیں کریں گے۔ انہوں نے بہت پہلے اپنے حصے کی خدمت کی۔ بہت سارے سیکھنے کے وسائل بنیادی ڈیٹاسیٹس اور بنیادی فن تعمیرات پر توجہ مرکوز کر رہے ہیں اس سے پہلے کہ جدید بلیک باکس فن تعمیر کو کارکردگی کا بوجھ اٹھانے دیا جائے۔

ہم توجہ مرکوز کرنا چاہتے ہیں۔ demystification, عملیی, افہام و تفہیم, انترجشتھان اور حقیقی منصوبوں. سیکھنا چاہتے ہیں۔ کس طرح کیا آپ فرق کر سکتے ہیں؟ ہم آپ کو ایک سفر پر لے جائیں گے جس طرح سے ہمارے دماغ چھاتی کے کینسر کے لیے ایک ریسرچ گریڈ ڈیپ لرننگ کلاسیفائر لکھنے سے لے کر گہرے سیکھنے کے نیٹ ورکس تک لے جائیں گے جو کہ "فریب" کرتے ہیں، عملی کام کے ذریعے آپ کو اصول اور تھیوری سکھاتے ہیں، کمپیوٹر وژن کو حل کرنے کے لیے گہری سیکھنے کا اطلاق کرنے میں ماہر بننے کا طریقہ اور اوزار۔

اندر کیاہے؟

  • بصارت کے پہلے اصول اور کمپیوٹر کو "دیکھنا" کیسے سکھایا جا سکتا ہے۔
  • کمپیوٹر وژن کے مختلف کام اور ایپلی کیشنز
  • تجارت کے اوزار جو آپ کے کام کو آسان بنائیں گے۔
  • کمپیوٹر وژن کے لیے ڈیٹاسیٹس کی تلاش، تخلیق اور استعمال
  • Convolutional Neural Networks کا نظریہ اور اطلاق
  • ڈیٹا سیٹس میں ڈومین شفٹ، شریک ہونے اور دیگر تعصبات کو ہینڈل کرنا
  • سیکھنے کو منتقل کریں اور دوسروں کے تربیتی وقت اور کمپیوٹیشنل وسائل کو اپنے فائدے کے لیے استعمال کریں۔
  • ایک جدید ترین چھاتی کے کینسر کی درجہ بندی کرنے والے کی تعمیر اور تربیت
  • مرکزی دھارے کے خیالات پر شکوک و شبہات کی صحت مند خوراک کو کیسے لاگو کیا جائے اور وسیع پیمانے پر اختیار کی جانے والی تکنیکوں کے مضمرات کو کیسے سمجھا جائے
  • T-SNE اور PCA کا استعمال کرتے ہوئے ConvNet کی "تصور کی جگہ" کا تصور کرنا
  • کیس اسٹڈیز کہ کمپنیاں بہتر نتائج حاصل کرنے کے لیے کمپیوٹر ویژن تکنیک کا استعمال کیسے کرتی ہیں۔
  • ماڈل کی مناسب تشخیص، اویکت جگہ کا تصور اور ماڈل کی توجہ کی نشاندہی کرنا
  • ڈومین ریسرچ کرنا، آپ کے اپنے ڈیٹا سیٹس پر کارروائی کرنا اور ماڈل ٹیسٹ قائم کرنا
  • جدید فن تعمیر، خیالات کی ترقی، انہیں کیا منفرد بناتا ہے اور انہیں کیسے نافذ کیا جائے
  • KerasCV – جدید ترین پائپ لائنز اور ماڈل بنانے کے لیے ایک WIP لائبریری
  • پیپرز کو کیسے پارس کریں اور پڑھیں اور خود ان پر عمل کریں۔
  • آپ کی درخواست پر منحصر ماڈلز کا انتخاب
  • آخر سے آخر تک مشین لرننگ پائپ لائن بنانا
  • تیز تر R-CNNs، RetinaNets، SSDs اور YOLO کے ساتھ آبجیکٹ کا پتہ لگانے پر زمین کی تزئین اور بصیرت
  • مثال اور سیمنٹک سیگمنٹیشن
  • YOLOv5 کے ساتھ ریئل ٹائم آبجیکٹ کی شناخت
  • YOLOv5 آبجیکٹ ڈیٹیکٹر کی تربیت
  • KerasNLP (صنعت کی طاقت WIP لائبریری) کا استعمال کرتے ہوئے ٹرانسفارمرز کے ساتھ کام کرنا
  • تصاویر کے کیپشن بنانے کے لیے ConvNets کے ساتھ ٹرانسفارمرز کو مربوط کرنا
  • DeepDream
  • کمپیوٹر ویژن کے لیے ڈیپ لرننگ ماڈل کی اصلاح

ٹائم اسٹیمپ:

سے زیادہ Stackabuse