PytorchでHSV画像を扱う(RGB⇒HSV変換) [人工知能(ディープラーニング)]
Pytorchで画像を扱う時、輝度と色情報を分離して、色情報だけを抜き出したり、加工したい時があります。
そもそも一般的なRGBの形式だと、明るさ(輝度情報)と色の情報がRGBの各色情報に含まれているので単純に明るさを変えるとしても、RGBの3つのデータを扱う必要があります。
明るさの変更くらいならばRGBでも良いのですが…例えば、白黒画像をカラーにするとか、色だけを他の画像から持ってきたい、とかの場合には、RGB形式ではとんでもなく複雑な処理が必要になります。
ですがHSV形式のように色相(Hue)、彩度(Saturation・Chroma)、明度(Value・Brightness)で構成される画像だと、色の情報(HとS)と、輝度で作られる画像の情報(V)を別々に取り扱うことが出来ます。
色の情報だけを抜き取って、他の画像に色だけを移し替える事も簡単です。
他にも、白黒画像に色を追加してカラーにしたり、という場合にはRGBではなくて、HSVの方が効率的です。
明るさだけを変える場合には、明度(Value・Brightness)だけを変えれば良くて、色への影響がないのも便利です。
このHSV画像の取り扱いも、torchvisionとPILを組み合わせることで簡単に出来ます。
RGB→HSV変換、HSV→RGB変換も簡単です。
######----- pytorch、ptorchvision、PILのインポート
import torch
import torchvision
from PIL import Image
####画像の読み込み
a=Image.open('NEKO.JPG')
####RGB形式からHSV形式へ変換
neko2=a.convert('HSV')
####HSVのデータをTensor形式のデータに変換
tneko=torchvision.transforms.ToTensor()(neko2)
#これで、tnekoにHSV形式の3次元のTensorに変換されます。
####輝度を半分にしてみる場合にはこんな感じで直接データをいじることが出来ます。
tneko[2]=tneko[2]/2
####HSV形式のPILイメージに変換
neko3=torchvision.transforms.ToPILImage('HSV')(tneko)
####HSVからRGB形式へ変換
rgbneko=neko3.convert('RGB')
####表示してみる
rgbneko.show()
こんな感じで扱えます。
●注意点としては、torchvisionには、RGB画像を扱う、とても似た機能の命令があります。
※こちらを使うと、HSV形式などでの変換が出来ないので注意してください。
###PILイメージからTensorへ変換(RGB)
ttt=torchvision.transforms.functional.to_tensor(a)
###TensorからPILイメージへ変換(RGBのみ)
aa=torchvision.transforms.functional.to_pil_image(ttt)
opencvを使う人もいますが、(おそらく)この方法が簡単です。
そもそも一般的なRGBの形式だと、明るさ(輝度情報)と色の情報がRGBの各色情報に含まれているので単純に明るさを変えるとしても、RGBの3つのデータを扱う必要があります。
明るさの変更くらいならばRGBでも良いのですが…例えば、白黒画像をカラーにするとか、色だけを他の画像から持ってきたい、とかの場合には、RGB形式ではとんでもなく複雑な処理が必要になります。
ですがHSV形式のように色相(Hue)、彩度(Saturation・Chroma)、明度(Value・Brightness)で構成される画像だと、色の情報(HとS)と、輝度で作られる画像の情報(V)を別々に取り扱うことが出来ます。
色の情報だけを抜き取って、他の画像に色だけを移し替える事も簡単です。
他にも、白黒画像に色を追加してカラーにしたり、という場合にはRGBではなくて、HSVの方が効率的です。
明るさだけを変える場合には、明度(Value・Brightness)だけを変えれば良くて、色への影響がないのも便利です。
このHSV画像の取り扱いも、torchvisionとPILを組み合わせることで簡単に出来ます。
RGB→HSV変換、HSV→RGB変換も簡単です。
######----- pytorch、ptorchvision、PILのインポート
import torch
import torchvision
from PIL import Image
####画像の読み込み
a=Image.open('NEKO.JPG')
####RGB形式からHSV形式へ変換
neko2=a.convert('HSV')
####HSVのデータをTensor形式のデータに変換
tneko=torchvision.transforms.ToTensor()(neko2)
#これで、tnekoにHSV形式の3次元のTensorに変換されます。
####輝度を半分にしてみる場合にはこんな感じで直接データをいじることが出来ます。
tneko[2]=tneko[2]/2
####HSV形式のPILイメージに変換
neko3=torchvision.transforms.ToPILImage('HSV')(tneko)
####HSVからRGB形式へ変換
rgbneko=neko3.convert('RGB')
####表示してみる
rgbneko.show()
こんな感じで扱えます。
●注意点としては、torchvisionには、RGB画像を扱う、とても似た機能の命令があります。
※こちらを使うと、HSV形式などでの変換が出来ないので注意してください。
###PILイメージからTensorへ変換(RGB)
ttt=torchvision.transforms.functional.to_tensor(a)
###TensorからPILイメージへ変換(RGBのみ)
aa=torchvision.transforms.functional.to_pil_image(ttt)
opencvを使う人もいますが、(おそらく)この方法が簡単です。
コメント 0