|
Python va OpenCV kutubxonasi yordamida tasvirlarga ishlov berish
|
bet | 6/10 | Sana | 19.05.2024 | Hajmi | 5,85 Mb. | | #243799 |
Bog'liq Muhammad al-xorazmiy nomidagi toshkent axborot texnologiyalari u 2.3. Python va OpenCV kutubxonasi yordamida tasvirlarga ishlov berish.
Ushbu paragrafda biz OpenCV (Open Source Computer Vision) kutubxonasidan foydalanib tasvirga dastlabki ishlov berishni ko’rib chiqamiz. OpenCV kutubxonasida quyidagi turdagi fayllar qo’llab-quvvatlanadi:
Windows bitmaplari – *.bmp, *.dib
JPEG fayllari - *.jpeg, *.jpg
Portativ tarmoq grafikasi - *.png
WebP – *.webp
Sun rasterlari – *.sr, *.ras
TIFF fayllari - *.tiff, *.tif
GDAL tomonidan qo’llab-quvvatlanadigan rastr va vektor geografik ma’lumotlar.
Pythonda OpenCV kutubxonasidan foydalanish uchun biz ushbu kutubxonalarni old shart sifatida o’rnatishimiz kerak:
Numpy kutubxonasi: Kompyuter NumPy-dan foydalaniladigan matritsa ko’rinishidagi tasvirlarni qayta ishlaydi va OpenCV uni fonda ishlatadi.
OpenCV python: OpenCV kutubxonasi ilgari u cv edi, ammo yangilangan versiyasi cv2. U tasvirlar va videolarni manipulyatsiya qilish uchun ishlatiladi.
Ushbu kutubxonalarni o’rnatish uchun biz ushbu pip buyruqlarini cmd da ishga tushirishimiz kerak:
OpenCV-da tasvirni o’qish va ko’rsatish bosqichlari:
1. Imread() funksiyasidan foydalanib tasvirni o’qing.
2. GUI oynasini yarating va imshow() funksiyasidan foydalanib tasvirni ko’rsating.
3. Tasvir oynasini belgilangan soniyalarda ekranda ushlab turish uchun kutish tugmasidan (0) foydalaning, u foydalanuvchi uni yopguncha ekranda GUI oynasini ushlab turishini bildiradi.
4. destroyAllWindows() funksiyasidan foydalangan holda tasvir oynasini xotiradan o’chiring.
Tasvirlarni o’qish uchun cv2.imread() usuli qo’llaniladi. Ushbu usul belgilangan fayldan rasmni yuklaydi. Agar tasvirni o’qib bo’lmasa (fayl etishmayotganligi, noto’g’ri ruxsatnomalar, qo’llab-quvvatlanmaydigan yoki noto’g’ri format tufayli), bu usul bo’sh matritsani qaytaradi.
Sintaksis: cv2.imread (path, flag)
Parametrlar:
path: o’qilishi kerak bo’lgan tasvirning yo’lini ifodalovchi satr.
flag: Bu tasvirni o’qish usulini belgilaydi. Uning standart qiymati cv2.IMREAD_COLOR
Qaytish qiymati: Bu usul belgilangan fayldan yuklangan tasvirni qaytaradi.
Rasm ishchi katalogda bo’lishi kerak yoki tasvirning to’liq yo’li ko’rsatilishi kerak. Odatiy bo’lib, OpenCV rangli tasvirlarni BGR (Moviy yashil va qizil) formatida saqlaydi.
Quyida OpenCV va matplotlib kutubxonalari funksiyalaridan foydalangan holda tasvirlarni o’qish va tasvirlarni ekranda ko’rsatish uchun dasturlar mavjud.
Natija:
Shakl atributidan foydalanib, biz tasvirning shaklini, ya’ni kengligi va balandligini va kanallarini ko’rishimiz mumkin.
Matplotlib va OpenCV yordamida tasvirlarni tahlil qilish muhokama qilinaylik. Keling, avval turli uslublar bilan tasvir ma’lumotlarini qanday sinab ko’rishni va Histogram bilan qanday tasvirlashni tushunamiz.
Tasvir PNG faylida ishlatilishi kerak, chunki matplotlib faqat PNG rasmlarini qo’llab-quvvatlaydi. Mana, bu misolda foydalanilgan 24 bitli RGB PNG tasviri (R, G, B har biri uchun 8 bit). Har bir ichki ro’yxat pikselni ifodalaydi. Bu erda RGB tasviri bilan 3 ta qiymat mavjud. RGB tasvirlari uchun matplotlib float32 va uint8 ma’lumotlar turlarini qo’llab-quvvatlaydi.
img = plt.imread(‘gul.png’) #tasvir ma’lumotlarini o’qiydi
Matplotlibda bu imshow() funksiyasi yordamida amalga oshiriladi. Bu erda biz syujet ob’ektini qo’lga oldik.
Gistogramma kulrang shkaladagi piksellar chastotasi bilan bog’liq bo’lgan grafik yoki chizma sifatida qabul qilinadi.
Piksel qiymatlari bilan (0 dan 255 gacha). Kulrang shkala - bu har bir pikselning qiymati bitta namuna bo’lgan tasvir, ya’ni u piksel qiymati 0 dan 255 gacha o’zgarib turadigan faqat intensivlik ma’lumotlarini o’z ichiga oladi. Ushbu turdagi tasvirlar, shuningdek, qora va oq deb ham ataladi. faqat kulrang soyalar, eng zaif intensivlikdagi qoradan eng kuchli oqgacha o’zgaradi, bu erda Pixel tasvirning har bir nuqtasi sifatida ko’rib chiqilishi mumkin.
GreyScale tasviri qanday ko’rinadi:
U ko’rib chiqilgan har bir intensivlik qiymati uchun piksellar sonini aniqlaydi. Histogrammani ko’rib chiqishdan oldin, keling, ushbu misol bo’yicha taxminiy tasavvurga ega bo’laylik.
Bu erda biz ushbu tasvirning kontrasti, yorqinligi, intensivligini taqsimlash va boshqalar haqida sezgi olamiz. Ko’rib turganimizdek, rasm va uning gistogrammasi rangli tasvir uchun emas, balki kulrang tasvir uchun chizilgan.
Gistogrammaning chap tomoni tasvirdagi quyuqroq piksellar sonini, o’ng tomoni esa yorqinroq piksellar sonini ko’rsatadi.
Numpy massivi yordamida gistogramma yaratish
Tasvir ma’lumotlarimizning histogrammasini yaratish uchun hist() funksiyasidan foydalanamiz.
plt.hist(n_img.ravel(), bins=256, range=(0.0, 1.0), fc=‘k’, ec=‘k’) # histogrammani hisoblash
Bizning gistogramamizda qora va oq piksellarning kulrang shkalasi sifatida butun tasvir bo’ylab intensivlik taqsimoti borga o’xshaydi.
Gistogrammadan xulosa qilishimiz mumkinki, qorong’u mintaqa yorqinroq mintaqadan ko’ra ko’proq.
Endi biz piksel qiymati o’zgarib turadigan piksellarning intensivligini taqsimlashdan iborat bo’lgan tasvirni ko’rib chiqamiz. Birinchidan, biz OpenCV o’rnatilgan funksiyasi yordamida gistogrammani hisoblashimiz kerak.
Python va OpenCV yordamida tasvirni xiralashtirish.
Tasvirni xiralashtirish tasvirni kamroq tiniq yoki ravshanroq qilishni anglatadi. Bu turli xil past o’tkazuvchan filtr yadrolari yordamida amalga oshiriladi.
Xiralashtirishning afzalliklari:
Bu shovqinni olib tashlashda yordam beradi. Shovqin yuqori o’tish signali sifatida qabul qilinganligi sababli, past o’tish filtri yadrosini qo’llash orqali biz shovqinni cheklaymiz.
Bu tasvirni tekislashda yordam beradi.
Past zichlikdagi qirralar olib tashlanadi.
Bu kerak bo’lganda tafsilotlarni yashirishga yordam beradi. Masalan, ko’p hollarda politsiya jabrlanuvchining yuzini qasddan yashirishni xohlaydi, bunday hollarda loyqalik talab qilinadi.
Xiralashishning muhim turlari:
Gauss xiralashishi: Gauss xiralashishi Gauss funksiyasi yordamida tasvirni xiralashtirish natijasidir. Bu odatda tasvir shovqinini kamaytirish va tafsilotlarni kamaytirish uchun grafik dasturlarda keng qo’llaniladigan effektdir. Bundan tashqari, u bizning mashinani o’rganish yoki chuqur o’rganish modellarini qo’llashdan oldin dastlabki ishlov berish bosqichi sifatida ishlatiladi.
Masalan, Gauss yadrosi (3×3)
Median Blur: Median filtri chiziqli bo’lmagan raqamli filtrlash usuli bo’lib, ko’pincha tasvir yoki signaldan shovqinni olib tashlash uchun ishlatiladi. Median filtrlash raqamli tasvirni qayta ishlashda juda keng qo’llaniladi, chunki ma’lum sharoitlarda u shovqinni olib tashlagan holda qirralarni saqlaydi. Bu tuz va qalampir shovqinini olib tashlashning eng yaxshi algoritmlaridan biridir.
Ikki tomonlama xiralashtirish: Ikki tomonlama filtr chiziqli bo’lmagan, chekkalarni saqlaydigan va shovqinni kamaytiradigan tasvirlar uchun silliqlashtiruvchi filtrdir. U har bir pikselning intensivligini yaqin-atrofdagi piksellardagi intensivlik qiymatlarining o’rtacha og’irligi bilan almashtiradi. Bu vazn Gauss taqsimotiga asoslanishi mumkin. Shunday qilib, zaiflarni tashlab, o’tkir qirralar saqlanib qoladi.
Quyida Python kodi:
Natijasi:
III BOB. PYTHON DASTURLASH TILIDAN FOYDALANIB TASVIRLARGA DASTLABKI ISHLOV BERUVCHI
DASTUR YARATISH. 3.1. Pythonda OpenCV moduli orqali tasvirlarga dastlabki ishlov berish.
OpenCV - bu kompyuterni ko’rish uchun ochiq manbali kutubxona. U mashinaga yuzlar yoki narsalarni tanib olish imkoniyatini beradi. Ushbu qo’llanmada biz Python dasturlash tilidan foydalangan holda OpenCV tushunchasini o’rganamiz.
OpenCV - bu asosan real vaqtda kompyuterni ko’rishga qaratilgan dasturlash funktsiyalari kutubxonasi. Biz OpenCV yordamida tasvirni qayta ishlash, mashinani o’rganish va hokazolarni amalga oshirishimiz mumkin.
OpenCV Python misollarining ushbu seriyasida siz tasvirni o’qish, tasvir hajmini o’zgartirish, tasvirning turli rang kanallarini ajratib olish va shu rang kanallari bilan ishlash kabi Tasvirga ishlov berishda asosiy operatsiyalarni bajarish uchun Python dasturlarini yozishni boshlaysiz.
Shuningdek, siz tasvirdagi konturlarni topish, kameradan video olish, tasvirlarni aralashtirish, tasvirga matn yozish va hokazo kabi o’rta darajadagi ba’zi mavzularni o’rganasiz.
OpenCV - bu Python ochiq manba kutubxonasi bo’lib, u sun’iy intellekt, mashinani o’rganish, yuzni tanish va boshqalarda kompyuterni ko’rish uchun ishlatiladi.
OpenCV da rezyume kompyuter ko’rishning qisqartma shakli bo’lib, u kompyuterlarga fotosuratlar va videolar kabi raqamli tasvirlarning mazmunini tushunishga yordam beradigan o’rganish sohasi sifatida belgilanadi.
Kompyuterda ko’rishning maqsadi tasvirlarning mazmunini tushunishdir. U ob’ekt, matn tavsifi va uch o’lchovli model va boshqalar bo’lishi mumkin bo’lgan Tasvirlardan tavsifni chiqaradi. Masalan, avtomobillar yo’l atrofidagi turli xil ob’ektlarni, masalan, svetoforlar, piyodalar, yo’l belgilari va boshqalarni aniqlay oladigan va shunga mos ravishda harakat qiladigan kompyuter ko’rish bilan osonlashtirilishi mumkin.
Muayyan joydagi Tasvir intensivligi raqamlar bilan ifodalanadi. Yuqoridagi Tasvirda biz kul rangdagi tasvir uchun piksel qiymatlari faqat bitta qiymatdan iboratligini ko’rsatdik, bu joydagi qora rangning intensivligi.
Tasvirlarni aniqlashning ikkita umumiy usuli mavjud:
1. Kulrang rang
Kulrang rangdagi tasvirlar faqat ikkita qora va oq rangni o’z ichiga olgan tasvirlardir. Intensivlikning kontrast o’lchovi qora rangga eng zaif intensivlik, oq esa eng kuchli intensivlik sifatida qaraladi. Kulrang tasvirdan foydalanganda, kompyuter qorong’ulik darajasiga qarab har bir piksel qiymatini belgilaydi.
2. RGB
RGB qizil, yashil va ko’k ranglarning kombinatsiyasi bo’lib, ular birgalikda yangi rang hosil qiladi. Kompyuter bu qiymatni har bir pikseldan oladi va natijalarni sharhlash uchun massivga joylashtiradi.
|
| |