理解機器存儲圖像邏輯:
上圖是一個簡單的表示“8”的圖片,可被用來做為識別驗證碼
它由一個個或白或灰或黑的小色塊所組成,每一個小色塊的長度和面積都相同,僅在亮度方面有所分別,它們是計算機表示的基本單元:像素點
其在計算機中的表示形式如下:
每一個像素對應(0-255)的灰度模式,0為黑色,255為白色
所有的像素點以一種特定的規律組合在一起,才形成一張圖片
計算機以矩陣的方式存儲圖片,矩陣的大小取決於圖片的像素點數量,一般來說,固定面積下,圖片的像素點數量越多,圖片質量越高,存儲所需的矩陣也就越大,從而占用的計算機資源也就越多
除了灰度模式表示外,計算機還有另外一種圖像的表示方法:RGB模式
Red(0-255),Green(0-255),Blue(0-255)
由這三種顏色的組合,可模擬豐富多彩的各種現實世界的圖像
使用python進行圖像特征提取:
(一)灰度像素值作為特征
從圖像創建特征的最簡單方法是將這些原始像素值用作單獨的特征。
image = imread('puppy.jpeg', as_gray=True) image.shape
(650, 450
image.shape返回圖片經過灰度處理后的像素點分布數量
650*450=292500
這292500個像素點就可以算作圖像最原始的特征
features = np.reshape(image, (650*450))
features.shape, features
(292500,) array([0.96470588, 0.96470588, 0.96470588, ..., 0.96862745, 0.96470588, 0.96470588])
(二)通道的平均像素值
上面是以黑白像素點組成的灰度像素分布,如果想要保留原本的彩色特征呢?
image = imread('puppy.jpeg') image.shape
(650, 450, 3)
與上面相比,此次獲得的像素點為650*450*3達到了877500
這里的3就是通道數,分別代表RGB三個通道
計算通道的平均像素值:
for i in range(0,image.shape[0]): for j in range(0,image.shape[1]): feature_matrix[i][j] = ((int(image[i,j,0]) + int(image[i,j,1]) + int(image[i,j,2]))/3)
features = np.reshape(feature_matrix, (650*450))
features.shape
(292500,)
(三)邊緣特征
假設有如下的圖片:
我們需要分別提取圖像的中的物體,這個時候使用簡單的像素特征或是色彩通道均值特征都很難做到區分
這里,就需要用到邊緣特征
邊緣特征是什么?
如下圖:
在一個具有圖像變化的圖片中,圖像強度快速變化往往就稱為圖像邊緣
如下圖:
其中的數字就代表像素值,在計算機處理時,可以通過判斷中心像素點周圍的像素值差值從而判斷中心像素點是否處在圖像邊緣
如圖中的像素點85周圍,相互差值(89-78/68-56)都只在15以內,亮度變化並不明顯,所以可以判斷85像素點不處在像素邊緣
那么什么樣的情況算處在圖像邊緣呢?
如下圖:
125像素點周圍,相互差值(111-68/96-89)最大的已經達到了43,這種程度的亮度變化已經可以被肉眼識別到了,就此可以判斷125像素點處於圖像邊緣
用python識別圖像邊緣:
#importing the required libraries import numpy as np from skimage.io import imread, imshow from skimage.filters import prewitt_h,prewitt_v import matplotlib.pyplot as plt %matplotlib inline #reading the image image = imread('puppy.jpeg',as_gray=True) #calculating horizontal edges using prewitt kernel edges_prewitt_horizontal = prewitt_h(image) #calculating vertical edges using prewitt kernel edges_prewitt_vertical = prewitt_v(image) imshow(edges_prewitt_vertical, cmap='gray')
參考資料
https://www.analyticsvidhya.com/blog/2019/08/3-techniques-extract-features-from-image-data-machine-learning-python/?#
https://wlgls.github.io/posts/%E7%AC%AC%E4%BA%8C%E8%8A%82-%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89-%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B