ええ、それはとても簡単です。画像を HSV に変換し、色相チャンネルを取得してモジュロ 360 度を加算または減算し、画像を元に戻すだけです。色相を操作しても、実際に必要な画像に表示される黒/グレー/白の色には影響しないことに注意してください。HSV 色空間の彩度と値のコンポーネントがそれを行います。この各ピクセルの色相コンポーネントの加算および/または減算は、Photoshop (および GIMP などの他の同様のグラフィカル エディター) がフードの下で実行するものです。
関数rgb2hsv
とそれに対応する同等のものを使用しますhsv2rgb
。ただし、変換された各チャネルのダイナミック レンジは からです[0,1]
が、通常、色相は 0 ~ 360 度で表されます。したがって、色相チャンネルに 360 を掛け、モジュロを実行し、完了したら 360 で割ります。
投稿にあるように呼び出される関数を作成したい場合はhueadjust
、次のようにします。
function newImage = hueadjust(img, hAdjust)
hsv = rgb2hsv(img);
hue = 360*hsv(:,:,1);
hsv(:,:,1) = (mod(hue + hAdjust, 360)) / 360;
newImage = hsv2rgb(hsv);
end
コードの最初の行は、画像を HSV に変換します。コードの次の行は、色相チャンネルを という変数にコピーし、各値を 360 で乗算します。次に、元の画像 ( に保存されている)hue
の各色相値を取得して、各色相を加算することにより、元の画像の色相チャンネルに書き戻します。これは望ましい角度のシフトであり、360 度を超えた場合は 0 に戻るようにし (これが行われていることです)、結果を 360 で除算して、期待されるダイナミック レンジに戻します。この変更された画像は RGB に変換され、出力に送信されます。hue
hAdjust
mod
[0,1]
double
への呼び出しにより、出力イメージが 型になることに注意してくださいhsv2rgb
。各チャネルのダイナミック レンジは の範囲内にある[0,1]
ため、これらのイメージを問題なくファイルに簡単に書き込むことができます。何らかの理由でイメージ自体の元のタイプに戻したい場合はim2uint8
、Image Processing Toolbox などの関数を使用して、入力を符号なし 8 ビット整数形式に戻すことができます。実際に見られるほとんどの画像は、この基準を採用しています。
この関数がどのように機能するかを示す簡単な例を次に示します。また、完全を期すために、色相環がどのように見えるかを見てみましょう。

出典: Lode のコンピューター グラフィックス チュートリアル
赤の色相は約 0 度ですが、マゼンタの色相は約 315 度または -45 度です。onions.png
MATLAB の Image Processing Toolbox に付属している画像も使用してみましょう。次のようになります。

まずはこちらの画像も読んでみましょう。上の画像は、画像が参照する URL を使用して、インターネットから直接読み取ることができます。
im = imread('http://i.stack.imgur.com/BULoQ.png');
IPTの機能の良いところはimread
、インターネットから直接画像を読み込めることです。赤の色相がマゼンタになるように色相を変換またはシフトしたいので、それぞれのすべての色相を-45度シフトします。したがって、次のように関数を実行します。
out = hueadjust(im, -45);
で画像を表示するとimshow(out)
、次のようになります。

変換されたときの残りの色相は意味があることに注意してください。緑はかなりくすんだ緑で、おそらく 60 度前後の色相でホバリングしています。45 を引くと、これが赤くなり、結果の画像で確認できます。黄色についても同じことが言えます。黄色は約 30 ~ 40 度の色相でホバリングします。また、これらの白い領域で見られる色は予想される純粋な白ではない (100% の彩度ではない) ため、白い色がわずかに影響を受ける可能性が高いことに注意してください。