Pernahkah anda menemui imej berkualiti rendah dalam pembelajaran mesin atau projek penglihatan komputer? Imej adalah nadi kepada banyak sistem AI, tetapi tidak semua imej dicipta sama. Sebelum melatih model atau menjalankan algoritma, beberapa prapemprosesan imej biasanya diperlukan untuk mendapatkan hasil yang optimum. Prapemprosesan imej dalam Python akan menjadi rakan baharu anda.
Dalam panduan ini, anda akan mempelajari semua petua dan kiat untuk menyediakan imej untuk analisis menggunakan Python. Kami akan merangkumi segala-galanya daripada mengubah saiz dan memotong kepada pengurangan hingar dan normalisasi. Pada ketika itu, imej anda akan sedia untuk analisis terperinci. Dengan bantuan perpustakaan seperti OpenCV, Pillow, dan scikit-image, anda akan dapat meningkatkan imej dalam masa yang singkat. Jadi bersiaplah dan selami panduan lengkap teknik prapemprosesan imej dalam Python ini!
Pemprosesan imej ialah proses memproses data imej mentah ke dalam format yang boleh digunakan dan bermakna. Ia direka untuk menghapuskan herotan yang tidak perlu dan meningkatkan ciri khusus yang diperlukan untuk aplikasi penglihatan komputer. Prapemprosesan ialah langkah pertama yang kritikal dalam menyediakan data imej sebelum memasukkannya ke dalam model pembelajaran mesin.
Beberapa teknik digunakan dalam prapemprosesan imej:
Dengan gabungan teknik ini yang betul, anda boleh meningkatkan data imej anda dengan ketara dan membina aplikasi penglihatan komputer yang lebih baik. Prapemprosesan imej meningkatkan kualiti dan kebolehgunaan imej dengan menukar imej mentah kepada format yang sesuai untuk penyelesaian masalah.
Untuk mula menggunakan Python untuk pemprosesan imej, terdapat dua pilihan popular untuk memuatkan dan menukar imej kepada format yang boleh dikendalikan oleh perpustakaan: OpenCV dan Bantal.
Muat imej menggunakan OpenCV: OpenCV boleh memuatkan imej dalam format PNG, JPG, TIFF dan BMP. Anda boleh memuatkan imej menggunakan kod berikut:
import cv2image = cv2.imread('path/to/image.jpg')
Ini akan memuatkan imej sebagai tatasusunan NumPy. Memandangkan imej berada dalam ruang warna BGR, anda mungkin mahu menukarnya kepada RGB.
Muat imej menggunakan Bantal: Bantal ialah garpu mesra PIL (Python Image Library). Ia menyokong lebih banyak format daripada OpenCV, termasuk JPA, ICO dan WEBP. Anda boleh memuatkan imej menggunakan kod berikut:
from PIL import Imageimage = Image.open('path/to/image.jpg')
Imej akan berada dalam ruang warna RGB.
Tukar antara ruang warna: Anda mungkin perlu menukar antara ruang warna seperti RGB, BGR, HSV dan Skala Kelabu. Ini boleh dilakukan menggunakan OpenCV atau Pillow. Contohnya, untuk menukar BGR kepada skala kelabu dalam OpenCV, anda boleh menggunakan:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Atau untuk menukar RGB kepada HSV dalam Bantal, anda boleh menggunakan:
image = image.convert('HSV')
Dengan kemahiran asas ini, anda boleh beralih kepada teknik yang lebih maju, seperti mengubah saiz, menapis, pengesanan tepi, dsb. Kemungkinannya tidak berkesudahan! Apakah jenis projek pemprosesan imej yang akan anda bina?
调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是224x224或256x256像素。在Python中,您可以使用OpenCV或Pillow库进行调整大小和裁剪。使用OpenCV,可以使用resize()函数。例如:
import cv2img = cv2.imread('original.jpg')resized = cv2.resize(img, (224, 224))
这将将图像调整为224x224像素。要将图像裁剪为正方形,可以计算中心正方形裁剪大小并使用OpenCV的crop()与中心坐标。例如:
height, width, _ = img.shapesize = min(height, width)x = (width size) // 2y = (height size) // 2cropped = img[y:y+size, x:x+size]
使用Pillow,您可以使用Image.open()和resize()函数。例如:
from PIL import Imageimg = Image.open('original.jpg')resized = img.resize((224, 224))
裁剪图像时,使用img.crop()。例如:
width, height = img.sizesize = min(width, height)left = (width size) / 2top = (height size) / 2right = (width + size) / 2bottom = (height + size) / 2cropped = img.crop((left, top, right, bottom))
调整大小和裁剪图像至标准尺寸是一个至关重要的第一步。这将使您的机器学习模型能够有效地处理图像,并提高结果的准确性。花时间仔细调整大小和裁剪图像,您的模型将感激不尽!
在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使图像更适合进行分析,并使机器学习模型能够独立于光照条件学习模式。
像素值重新缩放:最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(RGB图像通常为255)来实现的。例如:
import cv2img = cv2.imread('image.jpg')normalized = img / 255.0
这将使所有像素在0到1之间缩放,其中0为黑色,1为白色。
直方图均衡化:另一种有用的技术是直方图均衡化。这将像素强度均匀分布到整个范围以提高对比度。可以使用OpenCV的equalizeHist()方法应用它:
eq_img = cv2.equalizeHist(img)
这对于像素值集中在一个狭窄范围内的低对比度图像效果很好。对于一些算法,将像素值归一化为零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来实现:
mean, std = cv2.meanStdDev(img)std_img = (img mean) / std
这将使图像以零为中心,标准差为1。还有一些其他更复杂的归一化技术,但这三种方法——重新缩放为0-1范围、直方图均衡化和标准化——涵盖了基础知识,将为大多数机器学习应用准备好图像数据。确保对训练和测试数据都应用相同的归一化以获得最佳结果。
一旦您在Python中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:
高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。
中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。
拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。
反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。
Penapis dua hala mengekalkan bahagian tepi sambil melicinkan imej. Ia melakukan ini dengan mempertimbangkan kedekatan ruang dan persamaan warna piksel. Piksel yang rapat dari segi ruang dan warna yang serupa diratakan bersama, manakala piksel yang berbeza warna tidak dilicinkan. Ini menghasilkan imej licin yang tepinya kekal tajam. Penapis dua hala berguna untuk pengurangan hingar sebelum pengesanan tepi.
Dengan menggunakan penapis ini, anda akan memperoleh imej yang dipertingkatkan berkualiti tinggi, bersedia untuk analisis mendalam dan tugasan penglihatan komputer. Cuba mereka dan lihat cara mereka meningkatkan hasil pemprosesan imej anda!
Mengesan dan mengalih keluar latar belakang imej ialah langkah pra-pemprosesan yang penting dalam banyak tugas penglihatan komputer. Segmentasi memisahkan subjek latar depan dari latar belakang, memberikan anda imej yang jelas yang mengandungi subjek sahaja. Beberapa cara biasa untuk melaksanakan pembahagian imej dalam Python menggunakan OpenCV dan scikit-image ialah:
Ambang: Ambang menukar imej skala kelabu kepada imej binari (hitam dan putih), dengan memilih nilai ambang. Piksel yang lebih gelap daripada nilai ambang menjadi hitam dan piksel yang lebih terang daripada nilai ambang menjadi putih. Ini berfungsi dengan baik untuk imej dengan kontras tinggi dan pencahayaan yang sekata. Anda boleh menggunakan ambang menggunakan kaedah ambang () OpenCV. Pengesanan Tepi: Pengesanan tepi mencari tepi objek dalam imej. Dengan menyambungkan tepi, anda boleh mengasingkan subjek latar depan. Pengesan tepi Canny ialah algoritma popular yang dilaksanakan dalam kaedah canny() scikit-image. Laraskan parameter low_threshold dan high_threshold untuk mengesan tepi. Wilayah Berkembang: Wilayah tumbuh bermula dari satu set titik benih dan mengembang ke luar untuk mengesan kawasan berterusan dalam imej. Anda memberikan titik benih dan algoritma menyemak piksel jiran untuk menentukan sama ada untuk menambahkannya ke rantau ini. Ini akan berterusan sehingga tiada lagi piksel boleh ditambah. Kaedah skimage.segmentation.region_growing() melaksanakan teknik ini. Watershed: Algoritma tadahan air menganggap imej sebagai peta topografi, dengan piksel berintensiti tinggi mewakili puncak dan lantai lembah mewakili sempadan antara kawasan. Ia membanjiri turun dari puncak, mewujudkan halangan mengasingkan apabila kawasan yang berbeza bertemu. Kaedah skimage.segmentation.watershed() melakukan segmentasi watershed. Dengan mencuba teknik ini, anda boleh mengasingkan subjek anda dalam imej anda. Segmentasi ialah langkah pertama yang kritikal yang membolehkan anda memfokuskan model penglihatan komputer anda pada bahagian paling penting imej - subjek latar depan.Untuk mencapai peningkatan maksimum dalam data, anda boleh menggabungkan berbilang teknik peningkatan pada imej yang sama. Contohnya, anda boleh menyelak, memutar, memangkas dan melaraskan warna imej untuk menjana banyak titik data baharu daripada satu imej asal. Tetapi berhati-hati untuk tidak terlalu mempertingkatkannya, atau ia boleh menyebabkan imej tidak dapat dikenali!
Menggunakan penambahan data, anda boleh meningkatkan saiz set data imej anda dengan mudah sebanyak 4x, 10x atau lebih tanpa mengumpul sebarang imej baharu. Ini membantu menahan pemasangan berlebihan dan meningkatkan ketepatan model sambil mengekalkan masa latihan dan kos tetap.
Memilih teknik prapemprosesan yang betul untuk projek analisis imej anda bergantung pada data dan matlamat anda. Beberapa langkah biasa termasuk:
Mengubah saiz imej kepada saiz yang konsisten adalah penting untuk algoritma pembelajaran mesin berfungsi dengan betul. Anda biasanya mahu semua imej mempunyai ketinggian dan lebar yang sama, biasanya saiz yang lebih kecil seperti 28x28 atau 64x64 piksel. Kaedah resize() dalam OpenCV atau pustaka Bantal memudahkan untuk melakukan ini secara pengaturcaraan.
Tukar imej kepada skala kelabu atau hitam putih untuk memudahkan analisis anda dan mengurangkan hingar. Kaedah cvtColor() OpenCV menukar imej daripada RGB kepada skala kelabu. Untuk imej hitam dan putih, gunakan ambang.
Teknik seperti Gaussian Blur, Median Blur dan Penapisan Dua Hala boleh mengurangkan hingar dan imej yang licin. Kaedah GaussianBlur(), medianBlur() dan bilateralFilter() OpenCV menggunakan penapis ini.
Menormalkan nilai piksel kepada julat standard 0 hingga 1 atau -1 hingga 1 membantu algoritma berfungsi dengan lebih baik. Anda boleh menormalkan imej menggunakan kaedah normalize() dalam scikit-image.
Untuk imej kontras rendah, penyamaan histogram boleh meningkatkan kontras. Kaedah equalizeHist() OpenCV melaksanakan tugas ini.
Mencari tepi atau kontur dalam imej berguna untuk banyak tugas penglihatan komputer. Pengesan tepi Canny dalam kaedah Canny() OpenCV ialah pilihan yang popular.
Kuncinya ialah memilih teknologi yang sesuai dengan keperluan khusus anda. Mulakan dengan langkah asas seperti mengubah saiz, kemudian cuba kaedah yang berbeza untuk meningkatkan kualiti dan lihat yang mana yang mengoptimumkan hasil anda. Dengan beberapa percubaan, anda akan menemui aliran kerja prapemprosesan ideal anda.
Sekarang anda mempunyai pemahaman yang baik tentang pelbagai teknik prapemprosesan imej dalam Python, anda mungkin masih mempunyai beberapa soalan yang belum dijawab. Berikut ialah soalan yang paling kerap ditanya tentang prapemprosesan imej dan jawapannya:
Python menyokong pelbagai format imej melalui perpustakaan seperti OpenCV dan Pillow. Beberapa format utama termasuk:
• JPEG — Format imej lossy biasa
• PNG — Format imej lossless, sesuai untuk imej dengan ketelusan
• TIFF — Format imej lossless, sesuai untuk imej kedalaman warna tinggi
BMP — Format imej raster tidak dimampatkan
Situasi apabila imej perlu diubah saiz termasuk:
• Imej terlalu besar untuk diproses dengan cekap. Mengecilkan saiz boleh mempercepatkan pemprosesan.
• Imej perlu sepadan dengan saiz input model pembelajaran mesin.
• Imej perlu dipaparkan pada saiz tertentu pada skrin atau halaman web.
Beberapa teknik pengurangan hingar yang popular termasuk:
• Gaussian Blur — Gunakan penapis Gaussian untuk mengaburkan imej dan mengurangkan hingar frekuensi tinggi.
• 中值模糊 — 用邻近像素的中值替换每个像素。对于去除椒盐噪声非常有效。
• 双边滤波器 — 在平滑图像的同时保留边缘。它可以去除噪声同时保持清晰的边缘。
OpenCV支持RGB、HSV、LAB和灰度颜色空间。您可以使用cvtColor函数在这些颜色空间之间进行转换。例如:
将RGB转换为灰度:
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
将RGB转换为HSV:
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
将RGB转换为LAB:
lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)
将图像转换为不同的颜色空间对于某些计算机视觉任务(如阈值处理、边缘检测和目标跟踪)非常有用。
这就是您所需要的,一个在Python中准备图像进行分析的完整指南。借助OpenCV和其他库的强大功能,您现在拥有调整大小、增强、过滤和转换图像的所有工具。随意尝试不同的技术,调整参数,找到最适合您特定数据集和计算机视觉任务的方法。图像预处理可能不是构建AI系统中最引人注目的部分,但它绝对是至关重要的。
Atas ialah kandungan terperinci Panduan lengkap untuk prapemprosesan imej Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!