私は白から黄色のスケールの比色計を作ろうとしています。ヒストグラムを使って画像から色を測定する
私はよく説明しようとしますが、私はPythonとImage Processingで新しいので、間違ったことを言ってください。
私は3つのコンポーネント(色相、彩度、値)の色の特徴をよりよく表すことができると私が読んでいるHSV色空間を使用しています。私はいくつかの色合いの画像を持っていると仮定すると、プログラムは画素の色相、彩度、および画像の値に基づいて値を計算できなければなりません。値。
image of sugar crystalsの例を示します。紫色の背景を無視すると、砂糖には白と黄の色合いがあります。
私が最初に試みたのは、ほぼ完全に白い画像のヒストグラムを計算し、それを基準として使用し、別の画像のヒストグラムを計算し、それらを比較して類似しているかどうかを確認することでした。より黄色として、)単一の画像が白と黄色の両方の画素を有する、または色相ヒストグラムの異なる黄色の色調の均一な範囲とすることができることを覚えなければならない、以下同様である。その後
import numpy as np
import cv2
from matplotlib import pyplot as plt
image = cv2.imread("C:\...\im1.png")
image2 = cv2.imread("C:\...\im2.png")
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2HSV)
hue_hist = cv2.calcHist([hsv_image], [0], None, [180], [0, 180])
sat_hist = cv2.calcHist([hsv_image], [1], None, [256], [0, 256])
val_hist = cv2.calcHist([hsv_image], [2], None, [256], [0, 256])
hue_hist2 = cv2.calcHist([hsv_image2], [0], None, [180], [0, 180])
sat_hist2 = cv2.calcHist([hsv_image2], [1], None, [256], [0, 256])
val_hist2 = cv2.calcHist([hsv_image2], [2], None, [256], [0, 256])
dh = cv2.compareHist(hue_hist, hue_hist2, cv2.cv.CV_COMP_CORREL)
ds = cv2.compareHist(sat_hist, sat_hist2, cv2.cv.CV_COMP_CORREL)
dv = cv2.compareHist(val_hist, val_hist2, cv2.cv.CV_COMP_CORREL)
、私が希望色相、彩度、および値のヒストグラムの類似性を示す3つの別々の値を持っていれば、dh、ds、dvの各組み合わせのyスコア値を得るためにいくつかの数学的モデリングを試すことができます。
黄色のピクセル画像の色相ヒストグラムを比較すると、相関比較では、白と黄の色合いがわずかに変化するため、類似していると解釈されても完全に異なることが示されます。私は、ヒストグラム上のピクセルの頻度だけに依存するものではなく、色相値の近接性も必要とします。
ヒストグラムの加重平均を計算することを考えていたので、類似の分布についてはもっと近い値 を使用することもできました。30色相のピクセルピークとピークを持つ別の画像 の25色相のピクセル(完全に離れているわけではありません)。私はまだこれを試していない。
これを達成するためのよりよい方法があるかどうか、または少なくともそのようなアプリケーションを実行する正しい方法を知っていますか?
どのように完全に黒い画像を扱いたいですか? – Bill
実際には、私の特定の目的のために黒い画像を処理する必要はありませんが、もしそうなら、私は白から黄色の色に興味があるので、完全に仕様色から検出すると予想します。 –
砂糖の結晶の画像は、あなたが白から黄色までの色のレベルが異なるため、私がやろうとしている処理の種類を取り除くことができます。 –