This media is not supported in your browser
VIEW IN TELEGRAM
💢تقسیم بندی💢
هنگامی که ما در حال تلاش برای جمع آوری اطلاعات در مورد یک تصویر هستیم، ابتدا باید آن را به ویژگی هایی که علاقه مند هستنم تقسیم کنیم. این تقسیم بندی نامیده می شود. تقسیم بندی تصویر فرآیند نمایش یک تصویر در بخش ها است تا آن را برای تجزیه و تحلیل آسان تر کند
هنگامی که ما در حال تلاش برای جمع آوری اطلاعات در مورد یک تصویر هستیم، ابتدا باید آن را به ویژگی هایی که علاقه مند هستنم تقسیم کنیم. این تقسیم بندی نامیده می شود. تقسیم بندی تصویر فرآیند نمایش یک تصویر در بخش ها است تا آن را برای تجزیه و تحلیل آسان تر کند
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
_, threshold_img = cv2.threshold(gray_img, 60, 255, cv2.THRESH_BINARY)
threshold_img = cv2.cvtColor(threshold_img, cv2.COLOR_GRAY2RGB)
plt.figure(figsize=(10,10))
plt.imshow(threshold_img)
plt.show()
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
_, threshold_img = cv2.threshold(gray_img, 60, 255, cv2.THRESH_BINARY)
threshold_img = cv2.cvtColor(threshold_img, cv2.COLOR_GRAY2RGB)
plt.figure(figsize=(10,10))
plt.imshow(threshold_img)
plt.show()
این کار باعث میشود تصویر به راحتی به روشناییهای مختلف تقسیم شود. و این تنها مربوط به عکسهای خاکستری نیست و ما میتوانیم بخشهایی از عکسهای رنگی را با کانالهای رنگی تقسیم کنیم. آستانه رنگ با HSV بهترین کار را می کند.
به جای یافتن مقدار که تحت یک آستانه است،
ما می توانیم بخشی از تصویر را با رنگ هایی که در یک محدوده هستند پیدا کنیم
با cv2.inRange ().
ما می توانیم بخشی از تصویر را با رنگ هایی که در یک محدوده هستند پیدا کنیم
با cv2.inRange ().
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# threshold for hue channel in blue range
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
threshold_blue_img = cv2.inRange(img_hsv, blue_min, blue_max)
threshold_blue_img = cv2.cvtColor(threshold_blue_img, cv2.COLOR_GRAY2RGB)
plt.imshow(threshold_blue_img)
plt.show()
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('test.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# threshold for hue channel in blue range
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
threshold_blue_img = cv2.inRange(img_hsv, blue_min, blue_max)
threshold_blue_img = cv2.cvtColor(threshold_blue_img, cv2.COLOR_GRAY2RGB)
plt.imshow(threshold_blue_img)
plt.show()
💢Masking with a binary threshold💢
حالا که میتوانیم رنگها را شناسایی کنیم، کارهای جالبی مثل استفاده از تصویر باینری به عنوان ماسک میتوانیم انجام دهیم.
یک ماسک معمولا یک ماتریس از صفرها (برای قطعاتی است که باید حذف شوند) و غیر صفر (برای قطعاتی که میخواهیم نگهداریم).
حالا که میتوانیم رنگها را شناسایی کنیم، کارهای جالبی مثل استفاده از تصویر باینری به عنوان ماسک میتوانیم انجام دهیم.
یک ماسک معمولا یک ماتریس از صفرها (برای قطعاتی است که باید حذف شوند) و غیر صفر (برای قطعاتی که میخواهیم نگهداریم).
اگر بگم من یک نسخه از یک تصویر از یک منظره در فضای باز را که آسمان و دریا را منع می کند دوست دارم. ابتدا می توانیم پیکسل های موجود در محدوده رنگ آبی را پیدا کنیم که قسمت های آبی آسمان و دریا ی تصویر را شناسایی می کند. برای دریافت بخش هایی از تصویر که آسمان و دریا نیستند، ما می توانیم مقادیر با bitwise_not را معکوس کنیم، که قطعاتی را که آبی نیستند به ما می دهد و به ما ماسک می دهد.
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('5.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
mask_inverse = cv2.inRange(img_hsv, blue_min, blue_max)
mask = cv2.bitwise_not(mask_inverse)
plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))
plt.show()
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('5.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
mask_inverse = cv2.inRange(img_hsv, blue_min, blue_max)
mask = cv2.bitwise_not(mask_inverse)
plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))
plt.show()
import numpy as np
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('5.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
mask_inverse = cv2.inRange(img_hsv, blue_min, blue_max)
mask = cv2.bitwise_not(mask_inverse)
plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))
mask_rgb = cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB)
masked_upstate = cv2.bitwise_and(img, mask_rgb)
masked_replace_white = cv2.addWeighted(masked_upstate, 1, cv2.cvtColor(mask_inverse, cv2.COLOR_GRAY2RGB), 1, 0)
plt.imshow(cv2.cvtColor(masked_replace_white, cv2.COLOR_BGR2RGB))
plt.show()
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('5.jpg')
img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
blue_min = np.array([100, 100, 100], np.uint8)
blue_max = np.array([140, 255, 255], np.uint8)
mask_inverse = cv2.inRange(img_hsv, blue_min, blue_max)
mask = cv2.bitwise_not(mask_inverse)
plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))
mask_rgb = cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB)
masked_upstate = cv2.bitwise_and(img, mask_rgb)
masked_replace_white = cv2.addWeighted(masked_upstate, 1, cv2.cvtColor(mask_inverse, cv2.COLOR_GRAY2RGB), 1, 0)
plt.imshow(cv2.cvtColor(masked_replace_white, cv2.COLOR_BGR2RGB))
plt.show()
This media is not supported in your browser
VIEW IN TELEGRAM
سه روش آستانه گیری:
+ Simple thresholding
+ Adaptive thresholding
+ Otsu's thresholding
+ Simple thresholding
+ Adaptive thresholding
+ Otsu's thresholding
Simple Thresholding
اگر مقدار پیکسل از مقدار آستانه بزرگتر باشد،یک مقدار میگیره (ممکنه اون سفید باشه) و اگر کمتر باشه (ممکنه اون مقدار سیاه باشه).
در آستانه گیری ساده ا ز تابع cv2.threshold استفاده میکنیم.
- اولین آرگومان این تابع مربوط به تصویر اولیه میباشد که باید سیاه و سفید باشد.
- آرگومان دوم مقدار آستانه ای که برای طبقه بندی مقادیر پیکسل استفاده میشود.
- آرگومان سوم maxVal که نشان دهنده
بیشترین مقدار از مقدار آستانه است.
- سبک های مختلف آستانه توسط آرگومان چهارم مشخص میشود:
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
اگر مقدار پیکسل از مقدار آستانه بزرگتر باشد،یک مقدار میگیره (ممکنه اون سفید باشه) و اگر کمتر باشه (ممکنه اون مقدار سیاه باشه).
در آستانه گیری ساده ا ز تابع cv2.threshold استفاده میکنیم.
- اولین آرگومان این تابع مربوط به تصویر اولیه میباشد که باید سیاه و سفید باشد.
- آرگومان دوم مقدار آستانه ای که برای طبقه بندی مقادیر پیکسل استفاده میشود.
- آرگومان سوم maxVal که نشان دهنده
بیشترین مقدار از مقدار آستانه است.
- سبک های مختلف آستانه توسط آرگومان چهارم مشخص میشود:
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
import cv2
import numpy as np
img = cv2.imread('sample.jpg',0)
retval,threshold = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.imshow('Original ',img)
cv2.imshow('threshold ',threshold)
cv2.waitKey (0)
cv2.destroyAllWindows ()
import numpy as np
img = cv2.imread('sample.jpg',0)
retval,threshold = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
cv2.imshow('Original ',img)
cv2.imshow('threshold ',threshold)
cv2.waitKey (0)
cv2.destroyAllWindows ()