2017-02-02 11 views
0

私はmatplotlib.pyplot.imshow()で表示しようとしているRGB画像(N x N x 3マトリックス)を持っています。赤いチャンネルは他のチャンネルと比べて暗いですが、赤色のみにvminとvmaxを変更する方法はありませんでした。各チャンネルの輝度/コントラストを変更することは可能ですか?たぶん私は行列を直接操作することができるかもしれませんが、それほど楽しいとは言えません。matplotlibで各色のvminとvmaxを変更する方法imshow()

+0

行列を操作すると何が問題なのです。あなたの行列 'm'が'(N、N、3) 'で、'(3、) 'のスケーリングとオフセットベクトル' s'と 'o'を持つ場合、操作は'(m + o)* s 'または' m * s + o'かそのようなものです。放送は素晴らしい方法です。 –

+0

多分、赤のチャンネルに何らかの値を掛けたり、何とかすべてのチャンネルを正規化したりすることができます。私の場合、ピクセル値は負の値になります。私は、各チャンネルの分散とオフセットについて考える必要があります。私が各チャンネルのvminとvmaxを変えることができればもっと便利です。 –

+0

私はあなたのためにそれを行う3行の関数を記述しますか? –

答えて

1

画像を操作するのは本当に簡単です。

import matplotlib.pyplot as plt 
import numpy as np 

image = plt.imread("https://i.stack.imgur.com/9qe6z.png") 
print image.shape 
print image.max() 


def channelnorm(im, channel, vmin, vmax): 
    c = (im[:,:,channel]-vmin)/(vmax-vmin) 
    c[c<0.] = 0 
    c[c>1.] = 1 
    im[:,:,channel] = c 
    return im 

fig, (ax, ax2) = plt.subplots(ncols=2, figsize=(7,3)) 
ax.imshow(image) 

vmin = 0.1 
vmax = 0.5 
channel = 0 # red 
image2 = channelnorm(image, channel, vmin, vmax) 
ax2.imshow(image2) 

plt.show() 

enter image description here

関連する問題