Computer Vision: from 0 to HERO (4-dars)
Tags: uzbek, ai, machinelearning, computerscience
Published: 2023-02-20 14:31:47

## SciPy

![Scipy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ra59rz1qr5d5hxgxt5ly.png)

Numpy yuqori samarali ko'p o'lchovli massivlar va ushbu massivlar bilan hisoblash va ularni boshqarish uchun asosiy vositalarni taqdim etadi. SciPy numpy massivlariga asoslanadi va turli xil ilmiy va muhandislik ilovalari uchun foydali bo'lgan ko'plab funksiyalarni taqdim etadi.

SciPy bilan tanishishning eng yaxshi usuli [hujjatlarni ko'rib chiqishdir](https://docs.scipy.org/doc/scipy/reference/index.html). Hozirda esa biz uchun foydali bo'lishi mumkin bo'lgan SciPy'ning ba'zi qismlarini qarab chiqamiz.

**Rasm operatsiyalari**

SciPy tasvirlar bilan ishlash uchun ba'zi asosiy funksiyalarni taqdim etadi. Masalan, tasvirlarni numpy massivlarga o'qish, numpy massivlarni tasvir sifatida yozish va tasvir hajmini o'zgartirish funksiyalariga ega. Mana bu funksiyalarni ko'rsatadigan oddiy misol:

```
from scipy.misc import imread, imsave, imresize

# JPEG suratni numpy massivga o'qib olish
img = imread('assets/cat.jpg')
print(img.dtype, img.shape)  # Prints "uint8 (400, 248, 3)"

# Rang kanallarining har birini boshqa skalyar konstanta bilan masshtablash orqali tasvirni ranglashimiz mumkin;
# Tasvirning (400, 248, 3) shakli  bor;
# Uni (3,) shakldagi [1, 0,95, 0,9] massivga ko'paytiramiz;
# numpy broadcasting - bu qizil kanalni o'zgarishsiz qoldirishini anglatadi va yashil va ko'k kanallarni mos ravishda 0,95 va 0,9 ga ko'paytiradi.
img_tinted = img * [1, 0.95, 0.9]

# Rangli tasvirni 300x300 px holatiga keltirish
img_tinted = imresize(img_tinted, (300, 300))

# Rangli tasvirni xotiraga saqlash
imsave('assets/cat_tinted.jpg', img_tinted)
```

![Test](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xg8d17u6tnfrkt276m8v.png)

![test](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p88m4cynxpd16m7au8yt.png)

Tepada: asl rasm. Pastda: ranglangan va o'lchami o'zgartirilgan rasm.

---

## MATLAB fayllari

`scipy.io.loadmat` va `scipy.io.savemat` funktsiyalari sizga MATLAB fayllarini o'qish va yozish imkonini beradi. Ular haqida batafsil [hujjatlarda o'qishingiz mumkin](https://docs.scipy.org/doc/scipy/reference/io.html).

**Nuqtalar orasidagi masofa**

SciPy nuqtalar to'plami orasidagi masofani hisoblash uchun ba'zi foydali funktsiyalarni taqdim etadi.

`scipy.spatial.distance.pdist` funksiyasi berilgan to'plamdagi barcha (x, y) nuqtalar orasidagi masofani hisoblaydi:

Ushbu funksiya haqida barcha tafsilotlarni [hujjatlarda](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html) o'qishingiz mumkin .

Shunga o'xshash funksiya (`scipy.spatial.distance.cdist`) ikkita nuqta to'plamidagi barcha juftliklar orasidagi masofani hisoblaydi, bu haqda [hujjatlarda](https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html) o'qishingiz mumkin .

---

## Matplotlib

**Matplotlib** - bu chizmachilik kutubxonasi. Ushbu bo'limda `matplotlib.pyplot` MATLAB ga o'xshash chizma tizimini taqdim etadigan modul haqida qisqacha ma'lumot beriladi.

**Syujet tuzish**

Matplotlib'dagi eng muhim funksiya bu `plot2D` ma'lumotlarni chizish imkonini beradi. Mana oddiy misol:

```
import numpy as np
import matplotlib.pyplot as plt

# Sinus egri chiziqdagi nuqtalar uchun x va y koordinatalarini hisoblash
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)

# Matplotlib yordamida nuqtalarni ifodalash
plt.plot(x, y)
plt.show()  # Grafiklar paydo bo'lishi uchun plt.show() ga murojaat qilishingiz kerak.
```
Ushbu kodni ishga tushirish quyidagi chizma hosil qiladi:

![Graph](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r47emcv9cvvx3ecpczmo.png)

Bir oz qo'shimcha ish bilan biz bir vaqtning o'zida bir nechta satrlarni osongina chizishimiz, sarlavha va koordinata o'qlarining nomlarini qo'shishimiz mumkin:

```
import numpy as np
import matplotlib.pyplot as plt

# Sinus va kosinus egri chiziqlaridagi nuqtalar uchun x va y koordinatalarini hisoblash
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)

# Matplotlib yordamida nuqtalarni chizish
plt.plot(x, y_sin)
plt.plot(x, y_cos)
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('Sine and Cosine')
plt.legend(['Sine', 'Cosine'])
plt.show()
```

![gr](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zr4tvbih9vptwuah8fu9.png)

**Tasvirlar**

Rasmlarni ko'rsatish uchun `imshow` funksiyasidan foydalanishingiz mumkin . Mana bir misol:

```
import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt

img = imread('assets/cat.jpg')
img_tinted = img * [1, 0.95, 0.9]

# Original suratni chiqarish
plt.subplot(1, 2, 1)
plt.imshow(img)

# Ranglangan suratni chiqarish
plt.subplot(1, 2, 2)
 
# tasvirni ko'rsatishdan oldin uni uint8 ga konvert qilamiz
plt.imshow(np.uint8(img_tinted))
plt.show()
```

![img1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bzhb30ubfr2d2l3cekn.png)