- ارسالها
- 970
- امتیاز
- 20,487
- نام مرکز سمپاد
- فرزانگان۲
- شهر
- کرمان
- سال فارغ التحصیلی
- 1400
- رشته دانشگاه
- مهندسی کامپیوتر
خب من عادت دارم وقتی مبحثی رو میخونم یه جایی دربارش توضیح بدم. قبلا این اتفاق در کانال تلگرامم میافتاد ولی حالا که نیست اینجا مینویسم.
با پردازش تصویر شروع میکنم.
پردازش تصویر اصلا چیه؟ میتونه طیف وسیعی از کارها رو دربربگیره. به طور کلی میشه گفت سه سطح داره:
1. سطح پایین (low-level): ورودی و خروجی هر دو یک تصویرن. مثل کاری که با فوتوشاپ یا اینشات انجام میدین، فیلترهای مختلف روی تصویر انداختن. یا بهبود کیفیتش با بعضی هوش مصنوعیها.
2. سطح متوسط (mid-level): ورودی یک تصویر و خروجی یک تصویر دیگه باشه یا روی هر جزء تصویر برچسب بزنه و شناسایی کنه که چیه.
3. سطح بالا (high-level): اینکه تصویر بدی و هوش مصنوعیت بفهمه چیه و به یه درکی برسه.
من فعلا بیشتر با سطح پایین کار کردم به توضیحات ناقصم خورده نگیرید :)
احتمالا شنیدین فلان تصویر کنتراستش بالا یا پایینه. یعنی چی؟ یعنی رنگاش با هم یکنواخت نیستن و زیاد بودن یه رنگ ممکنه باعث بشه جزئیات تصویر دیده نشه.
چطوری تشخیص داده میشه؟ یکی از روشاش که خیلی دوست دارم رسم هیستوگرامه.
چطوری؟ برای یه تصویر سیاه و سفید مقدار هر پیکسل یه عدد صحیح بین 0 و 255 هست (0 سیاهترین و 255 روشنترین کد رنگه). برای رسم هیستوگرام کافیه برای هر کد رنگ بشماریم که چقدر در تصویر تکرار شده. مثلا این تصویر رو ببینید. مشخصه که تعداد زیادی از پیکسلهاش سفید یا نزدیک به سفیدن. حالا اگر هیستوگرامش رو رسم کنیم، مشخصه که تعداد زیادی از پیکسلها در بازهی 200-255 هستن و رنگ روشن دارن.
حالا فهمیدیم کنتراستش پایینه، چجوری بهترش کنیم؟ یکی از راهها که بهش همسانسازی هیستوگرام (Histogram equalization) میگن اینه که سعی کنیم این نمودار رو یکنواخت کنیم، طوری که تعداد تکرار هر کد رنگ تقریبا یکی بشه. یکی دیگه از راهها تطبیق هیستوگرامه. یعنی یه هیستوگرام مطلوب میدیم و دوست داریم توزیع کلی تبدیل به اون بشه. درسته نمیتونه همیشه عین نمودار مطلوب ما بشه ولی بازم نتایج خوبی داره. دربارهی جزییات این روشها و محاسباتشون توضیحی نمیدم و شاید یه روز دیگه صحبت کنم.
تصویر خروجی و هیستوگرامش با روش همسانسازی همچین چیزی میشه. میبینین که دیگه هیستوگرام در یک جا متمرکز نیست.
کدش رو هم میتونین ببینین. برای ران کردنش داشتن کتابخونههای open cv و matplotlib نیازتون میشه.
با پردازش تصویر شروع میکنم.
پردازش تصویر اصلا چیه؟ میتونه طیف وسیعی از کارها رو دربربگیره. به طور کلی میشه گفت سه سطح داره:
1. سطح پایین (low-level): ورودی و خروجی هر دو یک تصویرن. مثل کاری که با فوتوشاپ یا اینشات انجام میدین، فیلترهای مختلف روی تصویر انداختن. یا بهبود کیفیتش با بعضی هوش مصنوعیها.
2. سطح متوسط (mid-level): ورودی یک تصویر و خروجی یک تصویر دیگه باشه یا روی هر جزء تصویر برچسب بزنه و شناسایی کنه که چیه.
3. سطح بالا (high-level): اینکه تصویر بدی و هوش مصنوعیت بفهمه چیه و به یه درکی برسه.
من فعلا بیشتر با سطح پایین کار کردم به توضیحات ناقصم خورده نگیرید :)
احتمالا شنیدین فلان تصویر کنتراستش بالا یا پایینه. یعنی چی؟ یعنی رنگاش با هم یکنواخت نیستن و زیاد بودن یه رنگ ممکنه باعث بشه جزئیات تصویر دیده نشه.
چطوری تشخیص داده میشه؟ یکی از روشاش که خیلی دوست دارم رسم هیستوگرامه.
چطوری؟ برای یه تصویر سیاه و سفید مقدار هر پیکسل یه عدد صحیح بین 0 و 255 هست (0 سیاهترین و 255 روشنترین کد رنگه). برای رسم هیستوگرام کافیه برای هر کد رنگ بشماریم که چقدر در تصویر تکرار شده. مثلا این تصویر رو ببینید. مشخصه که تعداد زیادی از پیکسلهاش سفید یا نزدیک به سفیدن. حالا اگر هیستوگرامش رو رسم کنیم، مشخصه که تعداد زیادی از پیکسلها در بازهی 200-255 هستن و رنگ روشن دارن.
حالا فهمیدیم کنتراستش پایینه، چجوری بهترش کنیم؟ یکی از راهها که بهش همسانسازی هیستوگرام (Histogram equalization) میگن اینه که سعی کنیم این نمودار رو یکنواخت کنیم، طوری که تعداد تکرار هر کد رنگ تقریبا یکی بشه. یکی دیگه از راهها تطبیق هیستوگرامه. یعنی یه هیستوگرام مطلوب میدیم و دوست داریم توزیع کلی تبدیل به اون بشه. درسته نمیتونه همیشه عین نمودار مطلوب ما بشه ولی بازم نتایج خوبی داره. دربارهی جزییات این روشها و محاسباتشون توضیحی نمیدم و شاید یه روز دیگه صحبت کنم.
تصویر خروجی و هیستوگرامش با روش همسانسازی همچین چیزی میشه. میبینین که دیگه هیستوگرام در یک جا متمرکز نیست.
کدش رو هم میتونین ببینین. برای ران کردنش داشتن کتابخونههای open cv و matplotlib نیازتون میشه.
Python:
import cv2
import matplotlib.pyplot as plt
# Read image and convert to grayscale
image = cv2.imread('low_contrast3.png', cv2.IMREAD_GRAYSCALE) # Change the name
# Histogram equalization
equalized_image = cv2.equalizeHist(image)
# show image
cv2.imshow('Original Image', image)
cv2.imshow('Equalized Image', equalized_image)
# Histograms
plt.figure(figsize=(10, 5))
plt.title("Histogram before and after")
plt.axis('off')
plt.subplot(121), plt.hist(image.ravel(), 256, range=(0, 256)), plt.title('Original Histogram')
plt.subplot(122), plt.hist(equalized_image.ravel(), 256, range=(0, 256)), plt.title('Equalized Histogram')
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()
# Save image
cv2.imwrite('contrast.jpg', equalized_image)
آخرین ویرایش:

