python下對hsv顏色空間進行量化 | hsv python
更新:優化了程式碼,理由numpy的ufunc函式功能替換了之前的雙重for迴圈,測試圖片大小為692*1024*3,優化前執行時間為6.9s,優化後為0.8s。由於工作需要,需要計算顏色直方圖來提取顏色特徵,但若不將顏色空間進行量化,則直方圖向量維數過高,不便於使用。但是看了opencvAPI後並未發現提供了相關函式能夠在計算顏色直方圖的同時進行量化,因此這部分功能只能自己實現。下面分為兩個部分進行介紹:一、顏色空間量化表由於RGB模型不夠直觀,不符合人類視覺習慣,因此在進行顏色特徵提取前,需要將照片從RGB顏色模型轉換為更符合人類視...
更新:優化了程式碼,理由numpy的ufunc函式功能替換了之前的雙重for迴圈,測試圖片大小為692*1024*3,優化前執行時間為6.9s,優化後為0.8s。由於工作需要,需要計算顏色直方圖來提取顏色特徵,但若不將顏色空間進行量化,則直方圖向量維數過高,不便於使用。但是看了opencv API後並未發現提供了相關函式能夠在計算顏色直方圖的同時進行量化,因此這部分功能只能自己實現。下面分為兩個部分進行介紹:
一、顏色空間量化表由於RGB模型不夠直觀,不符合人類視覺習慣,因此在進行顏色特徵提取前,需要將照片從RGB顏色模型轉換為更符合人類視覺的HSV模型。在提取顏色特徵時,最常用的方法之一為顏色直方圖法,但一張圖片中出現的顏色一般特別多,導致直方圖向量的維數較高,因此需要對HSV空間進行量化。根據人眼對顏色的感知特性,採用較為常用的量化方法,即按照如下對應關係進行量化: 基於上述量化表,將各顏色分量按照下述公式合成為72維一維向量:G=9H+3S+VG=9H+3S+V
二、量化程式碼程式碼使用純python寫成,效率偏低,處理388*500畫素的照片用時1.45秒。在quantilize函式中,未使用if-else判斷語句,因此至少節省了1/3的時間。但這個速度顯然是無法令人滿意的,用C++效率應該會更高點。如果有人有更好的想法,歡迎在下方評論交流。
import cv2 import numpy as np from datetime import datetime from matplotlib import pyplot as plt def colors(imagepath): img = cv2.imread(imagepath) hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV) nhsv = np.zeros(hsv.shape[:2], dtype=np.uint8) t2 = datetime.now() for i in range(hsv.shape[0]): for j in range(hsv.shape[1]): ...