Yo'qotishsiz siqish : Bu usul siqilgandan oldingi sifatni saqlab qolgan holda fayl hajmini kamaytirish uchun ishlatiladi. Faylni asl shakliga qaytarish mumkin, chunki bu usul ma'lumotlar sifatini buzmaydi.
Yo'qotilgan siqish : Yo'qotilgan siqish - sezilmaydigan ma'lumotlarni yo'q qiladigan usul. Bu fotosuratga yanada kichikroq hajm beradi; yo'qotilgan siqilish rasmning unchalik muhim bo'lmagan qismlarini yo'q qiladi. Ushbu turdagi siqish texnikasida siqilgan tasvirni asl tasviriga qaytarish mumkin emas va ma'lumotlar hajmi o'zgaradi.
Keling, ushbu muammoni hal qilish uchun K-Means klasteridan foydalanaylik.
Siz allaqachon bilganingizdek, tasvir 3 ta kanaldan, RGB dan iborat bo'lib, ularning har biri [0, 255] oralig'ida qiymatlarga ega . Shunday qilib, ma'lum bir tasvir 255 * 255 * 255 xil rangga ega bo'lishi mumkin. Shunday qilib, biz tasvirni oziqlantirishdan oldin, uni oldindan qayta ishlashimiz kerak.
Biz ishlayotgan rasmning o'lchami (1365, 2048, 3). Shunday qilib, har bir piksel joylashuvi uchun qizil, yashil va ko'k intensivlik qiymatlarini ko'rsatadigan ikkita 8 bitli tamsayıga ega bo'lamiz. Bizning maqsadimiz uni 25 rangga qisqartirish va faqat shu ranglardan foydalangan holda fotosuratni taqdim etishdir.
Bu vazifa uchun zarur boʻlgan baʼzi paketlar quyida import qilinadi:
matplotlib.pyplotni plt
sifatida matplotlib.image dan import imread
import pandalarni pd
sifatida import numpy sifatida np
import seaborn sifatida sns
sifatida sklearn.cluster import KMeans _ Rasmni bu yerdan yuklab oling va uni o'qing.
img = imread ( 'saroy.jpg' )
img_size = img.shape
Tasvirni 2D ga o'zgartiring. Biz rasmga K-Means algoritmini qo'llaymiz va qaysi ranglardan foydalanishni tanlash uchun har bir pikselni ma'lumot nuqtasi sifatida ko'rib chiqamiz. Bu tasvirni balandlik x kenglik x kanallardan (balandlik X kenglik) x kanalga o'zgartirishni anglatadi; bizda 1365 x 2048 = 2795520 ma'lumot nuqtasi bo'ladi.
Ushbu usulga rioya qilish bizga 25 centroid yordamida tasvirni tasvirlash va tasvir hajmini kamaytirishga yordam beradi. Piksel ranglarini qidirish uchun markazdan foydalanishda sezilarli farq bo'ladi va bu har bir piksel joylashuvining o'lchamini 8 bit o'rniga 4 bitgacha kamaytiradi.
X = img.reshape(img_size[ 0 ] * img_size[ 1 ], img_size[ 2 ])