圖像預處理(一)基本特征提取


理解機器存儲圖像邏輯:

上圖是一個簡單的表示“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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM