6

ここに画像の説明を入力

この画像はほんの一例です。右上が元の画像、左上が色相、左下が彩度、右下が値です。簡単にわかるように、H と S の両方がアーティファクトで満たされています。結果がこのアーティファクトの多くを拾うように、明るさを減らしたいです。

私が間違っていることは何ですか?

私のコードは単純です:

vc = cv2.VideoCapture( 0 )
# while true and checking ret
ret, frame = vc.read()
frame_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
cv2.imshow("h", frame_hsv[:,:,0])
cv2.imshow("s", frame_hsv[:,:,1])
cv2.imshow("v", frame_hsv[:,:,2])
4

2 に答える 2

16

あなたの質問には誤解があると思います。Boyko Peranov の答えは確かに真実ですが、提供された画像に問題はありません。その背後にあるロジックは次のとおりです。カメラは、定義上立方体である RGB 色空間で写真を撮ります。これを HSV 色空間に変換すると、すべてのピクセルが次の円錐にマッピングされます。 HSVコーン

色相 (HSV の最初のチャネル) は円錐の角度、彩度 (HSV の 2 番目のチャネル、画像ではクロマと呼ばれる) は円錐の中心までの距離、値 (HSV の 3 番目のチャネル) は高さです。コーンに。

色相チャネルは通常 0 ~ 360 の間で定義され、0 の赤で始まります (8 ビット イメージの場合、OpenCV は 0 ~ 180 の範囲を使用して、ドキュメントに記載されているように unsigned char に合わせます)。しかし問題は、値 0 と 359 の 2 つのピクセルの色が非常に近いということです。外面のみを取得して HSV コーンを平坦化すると、より簡単に確認できます (彩度が最大の場合)。 扁平HSVコーン

これらの値が知覚的に近い場合でも (0 で完全に赤、359 で少し紫がかかった赤)、これら 2 つの値は大きく離れています。これが、Hue チャネルで説明した「アーティファクト」の原因です。OpenCV がグレースケールで表示すると、黒が 0 に、白が 359 にマッピングされます。実際、これらは非常に似た色ですが、グレースケールでマッピングすると、表示が離れすぎます。この直感に反する事実を回避する方法は 2 つあります。 H チャネルを固定の彩度と値を使用して RGB 空間に再キャストすることで、私たちの認識により近い表現を示すことができます。これらの数学的副作用を与えない知覚に基づく別の色空間 ( Lab 色空間など) を使用することもできます。

これらのアーティファクト パッチが正方形である理由は、Boyko Peranov によって説明されています。JPEG 圧縮は、置換するパッチに近い大きな正方形でピクセルを置き換えることによって機能します。jpg を作成するときに圧縮の品質を非常に低くすると、RGB 画像でもこれらの四角形が表示されることがわかります。品質が低いほど、正方形が大きくなり、見やすくなります。これらの二乗の平均値は単一の値であり、赤の色合いの場合、最終的に 0 ~ 5 (黒として表示) または 355 ~ 359 (白として表示) になる可能性があります。これが、「アーティファクト」が正方形である理由を説明しています。

また、色相チャネルに JPEG 圧縮のアーティファクトがさらに表示される理由を自問することもできます。これはクロマ サブサンプリングによるもので、知覚に基づく研究では、私たちの目は強度の急速な変化よりも色の急速な変化を認識しにくいことが示されました。そのため、JPEG は圧縮時に意図的にクロマ情報を失います。

ストーリーは、彩度(左下の画像)の白いさまざまなスポットについても同様です. (円錐の先端にある)ほぼ黒のピクセルを説明しています。したがって、彩度の値は大きく変化する可能性がありますが、ピクセルの色にはあまり影響しません。常に黒に近い値になります。これは、純粋に知覚に基づいていない HSV 色空間の副作用でもあります。

RGB (または OpenCV の場合は BGR) と HSV の間の変換は、(理論上) ロスレスです。HSV 画像を RGB 画像に再変換すると、元の画像とまったく同じ画像が得られ、アーティファクトは追加されません。

于 2015-01-28T20:32:53.017 に答える
3

非可逆圧縮画像を使用しているため、長方形のアーティファクトが発生します。ビデオでは、露出時間が短く、帯域幅が制限されるなどの理由で、全体的な画質が低下します。あなたはできる:

  • またはCaptureの代わりに使用して、一連の静止ショットを使用します。VideoCapture
  • 5 ~ 10 のビデオ フレームを抽出し、それらを平均化します。
于 2013-06-21T16:25:39.833 に答える