画像処理ソリューション
これを見れば画像処理の入門から基礎~応用まで全てがわかるのを目指して!
   
翻訳(Translate)

プロフィール

Akira

ニックネーム:Akira
東京都の町田事業所に勤務
画像処理ソフトの開発を行っています。リンクフリーです!
詳細プロフィールは こちら
お問い合わせは、こちら↓

【補助HP】
画像処理ソリューションWeb版 【Newブログ】
イメージングソリューション

スポンサーリンク


カテゴリ

最近のコメント

カレンダー

09 | 2017/10 | 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

趣味のブログ

iPhone萬歳!
iPhoneの情報いろいろ。
ブログ学習帳
ブログ、SEO、アフィリエイト情報など(まだまだこれから)
俺流クラフト日記
ハンドメイド作品の記録(現在、放置中)

スポンサーリンク 最近の記事
(09/18)  計測測定展に光切断のデモを出展しました
(08/17)  ディジタル画像技術事典200に記事が載りました
(06/09)  光切断を画像センシング展で公開
(05/14)  中国(上海)へ行って来ました
(04/12)  韓国へ行って来ました
(03/10)  私の求める新人像
(01/18)  エレクトロテストジャパンにカラー光切断法のデモを出展しました。
(12/23)  ユニークアクセス200万達成!
(12/10)  【カラー光切断法】YouTube動画まとめ
(11/04)  国際画像機器展2014にカラー光切断法を出展します。
(10/05)  第25回コンピュータビジョン勉強会@関東に参加してきました。
(09/08)  フーリエ変換の記事を追加しました。
(08/09)  【画像処理】ランキング低下中
(07/06)  記事の更新が停滞中...
(06/08)  画像センシング展2014でカラー光切断法のデモを行います。
(05/17)  カラー光切断法の動画を公開しました。
(04/30)  ソニーα NEX-5Rで星空撮影
(04/10)  カラー光切断法の取込結果を追加しました
(03/08)  Korea Vision Show 2014へ行ってきました
(02/05)  フーリエ変換シリーズを始めます。
(01/06)  2014年、あけましておめでとうございます。
(12/04)  カラー光切断法を公開(国際画像機器展2013にて)
(11/13)  国際画像機器展2013に出展します
(10/14)  「画像処理のためのC#」はじめます。
(09/16)  【C#,VB.NET】高速描画コントロールをバージョンアップしました。
(09/04)  拡大鏡に輝度値表示、ルーラー機能を追加した個人ツールを公開
(08/05)  7月の拍手Top5
(07/06)  2013年6月人気記事Top5
(05/12)  SONY α NEX-5Rレビュー
(04/24)  SONY α NEX-5RY購入

色相、彩度、明度ほか

メインページ画像処理

カラーの画像処理をする時には、これら色相などの知識は必須となります。
Windows標準で付いてくるペイントで、色の作成の表示をすると、雰囲気が分かると思います。

色相、彩度、明度

基本的に以下の色相、彩度、明度を用いて色を表すのですが、変換式にいくつかの種類があります。

色相(Hue)
色合いを表します。
赤や緑、青などに色を0~360°(0~2π)の角度を用いて表します。

彩度(Saturation)
鮮やかさを表します。
どれだけ純色に近いか?を表します。

明度(Brightness,Lightness,Intensity,Value)

色の明るさを表します。

HSV変換

6角錐モデルとも言います。

【RGB⇒HSV変換】

Imax = Max(R,G,B)
Imin = Min(R,G,B)

とすると

R = Imaxのとき
 H = 60×(G - B) / (Imax - Imin)
G = Imaxのとき
 H = 60×(B - R) / (Imax - Imin) + 120
R = Imaxのとき
 H = 60×(R - G) / (Imax - Imin) + 240

S = (Imax - Imin) / Imax

V = Imax

【HSVRGB変換

h = floor(H / 60)     floor()は切り捨て処理
P = V × (1 - S)
Q = V × (1 - S × (H
/ 60 - h))
T = V × (1 - S × (1 - H
/ 60 + h))
とすると

h= 0のとき
 R = V, G = T, B = P
h= 1のとき
 R = Q, G = V, B = P
h= 2のとき
 R = P, G = V, B = T
h= 3のとき
 R = P, G = Q, B = V
h= 4のとき
 R = T, G = P, B = V
h= 5のとき
 R = V, G = P, B = Q

HLS変換

双6角錐モデルとも言います。

【RGB⇒HLS変換】

Imax = Max(R,G,B)
Imin = Min(R,G,B)

とすると

R = Imaxのとき
 H = 60×(G - B) / (Imax - Imin)
G = Imaxのとき
 H = 60×(B - R) / (Imax - Imin) + 120
R = Imaxのとき
 H = 60×(R - G) / (Imax - Imin) + 240

L = (Imax + Imin) / 2

L ≦ 0.5のとき
 S = (Imax - Imin) / (Imax + Imin)
L > 0.5のとき
 S = (Imax - Imin) / (2 - Imax - Imin)

【HLSRGB変換

h < 0のとき
  h' = h  + 360
h ≧ 360のとき
  h' = h  - 360
その他
  h' = h

L ≦ 0.5のとき
  M2 = L × (1 + S)
L > 0.5のとき
  M2 = L + S - L × S

M1 = 2 × L - M2

h' < 60のとき
  X = M1 + (M2 - M1) × h' / 60
60 ≦ h' < 180のとき
  X = M2
180 ≦ h' < 240のとき
  X = M1 + (M2 - M1) × (240 - h' ) / 60
240 ≦ h' ≦ 360のとき
  X = M1

とすると
R = X  ただし、h = H + 120とする

G = X  ただし、h = Hとする

B = X  ただし、h = H - 120とする

カラー変換用関数

【Win32APIの場合】 VBの表記例
'HLS変換(Windows 2000以降、またはInternet Explorer 5.0がインストールされてある環境。(SHLWAPI.DLL Version 5.00以上)
'h (色相)
'赤(0)、黄(40)、緑(80)、シアン(120)、青(160)、マゼンダ(200)の順に定義0~239まで設定可
'L (明度)
'色の明るさをあらわす。0~240まで設定可。0が黒、240が白になる。
's (彩度)
'0~240まで設定可。240が純色になる。
Public Declare Sub ColorRGBToHLS Lib "SHLWAPI.DLL" _
                                (ByVal clrRGB As Long, _
                                 pwHue As Integer, _
                                 pwLuminance As Integer, _
                                 pwSaturation As Integer)
                                
Public Declare Function ColorHLSToRGB Lib "SHLWAPI.DLL" _
                                (ByVal wHue As Integer, _
                                 ByVal wLuminance As Integer, _
                                 ByVal wSaturation As Integer) As Long

最初に紹介したペイントの色の作成では、この関数と同様の変換(設定値を含めて同じ)をしています。

【.NET Frameworkの場合】
System.Drawing.Color構造体にて
  GetHueメソッド       HSBのH(色相)を取得
  GetSaturationメソッド   HSBのS(彩度)を取得
  GetBrightnessメソッド   HSBのB(明度)を取得
RGB⇒HSB変換はなし?

【OpenCVの場合】
cvCvtColor関数にて、以下の変換に対応
     XYZ, YCrCb(YCC), HSV, HLS, L*a*b, L*u*v
    その他 同じcvCvtColor関数で Bayer変換に対応

カラー画像処理例

そのカラー画像を色相、彩度、明度に分解し、それぞれの値(主に色相)でフィルタリング処理(バンドパスフィルタ)を行い、カラー画像に逆変換する事により、特定の色だけを抽出する事が可能になります。これにより、色の位置や個数などの検査をする事が可能となります。

処理前 処理後
色相、明度、彩度変換前色相、彩度、明度、フィルタリング処理後

ただし、彩度の値の小さな色(白やグレーに近い色)は彩度の値が不安的になりがちなので、カラー画像処理には不向きです。


【関連記事】
色相、彩度、明度の計算方法

Loading...
スポンサーリンク

この記事に対するコメント
訂正です
御教示されているアルゴリズムを完結に書いてみました。

Max=Max(R,G,B),Min=Min(R,G,B)とすると、

<色相>
HSV方式、HSL方式とも、色相Hは共通であり、
Max=R:H=60×(G-B)/(Max-Min),H<0ならばH=H+360
Max=G:H=120+60×(B-R)/(Max-Min)
Max=B:H=240+60×(R-G)/(Max-Min)
Max=Min(R=G=B):H=未定義

<HSV方式>
明度V=Max
彩度S=255×(Max-Min)/Max,Max=0ではS=0

<HSL方式>
明度L=(Max+Min)/2
彩度S=255×(Max-Min)/(255-|Max+Min-255|),Max=0またはMin=255ではS=0

R,G,Bを0~255で入力
Hを0~360で出力
Sを0~255で出力
LまたはVを0~255で出力
----------------------------------
なお、色相Hは、下記でも計算できます。
Min=B:H=60+60×(G-R)/(Max-Min)
Min=R:H=180+60×(B-G)/(Max-Min)
Min=G:H=300+60×(R-B)/(Max-Min)
Max=Min(R=G=B):H=未定義

さらに、六角錐(円錐)モデルは、
HSV方式もHSL方式も、彩度を「S=Max-Min」にした場合になります。

彩度を「S=255×(Max-Min)/Max」「S=255×(Max-Min)/(255-|Max+Min-255|)」にした場合、
六角柱(円柱)モデルになってしまいます。
【2016/03/19 12:52】 URL | PSP #CeIfeFHM [ 編集]


御教示されているアルゴリズムを完結に書いてみました。

Max=Max(R,G,B),Min=Min(R,G,B)とすると、

<色相>
HSV方式、HSL方式とも、色相Hは共通であり、
Max=R:H=60×(G-B)/(Max-Min),H<0ならばH=H+360
Max=G:H=60×(B-R)/(Max-Min)
Max=B:H=60×(R-G)/(Max-Min)
Max=Min(R=G=B):H=未定義

<HSV方式>
明度V=Max
彩度S=255×(Max-Min)/Max,Max=0ではS=0

<HSL方式>
明度L=(Max+Min)/2
彩度S=255×(Max-Min)/(255-|Max+Min-255|),Max=0またはMin=255ではS=0

R,G,Bを0~255で入力
Hを0~360で出力
Sを0~255で出力
LまたはVを0~255で出力
【2016/03/19 12:45】 URL | PSP #- [ 編集]


この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://imagingsolution.blog107.fc2.com/tb.php/170-ef70a6f4
この記事にトラックバックする(FC2ブログユーザー)

現在の閲覧者数: / 合計