2016-08-05 2 views
0

現在、私は全体の画像の平均に基づいてしきい値を超えるピクセル値の合計を取得して練習しています。 (私はPythonの初心者です)。私はPython 3.5.2を使用しています。上記のコードは、コードを記述して実験するために使用しているAtomプログラムからコピーされています。Pythonの平均ベースのしきい値を上回るピクセル値を取得する方法

当分の間、私は赤いチャンネルで練習していますが、最終的にすべてのカラーチャンネルを個別に分析する必要があります。

私がこれまで使用しています完全なコード:

import os 
from skimage import io 
from tkinter import * 
from tkinter.filedialog import askopenfilename 
def callback(): 
    M = askopenfilename()  #to select a file 
    image = io.imread(M)  #to read the selected file 
    red = image[:,:,0]   #selecting the red channel 
    red_av = red.mean()   #average pixel value of the red channel 
    threshold = red_av + 100 #setting the threshold value 
    red_val = red > threshold 
    red_sum = sum(red_val) 
    print(red_sum) 
Button(text = 'Select Image', command = callback).pack(fill = X) 
mainloop() 

は今、すべては私がプログラムを実行する場合を除き、これまでの作品、red_sumthreshold上記の画素数であるように出てくる、ではありませんピクセルの合計。

私は何が欠けていますか?私はred_val変数を宣言する私の(可能性のある)方法はそれと関係があると考えています。

ただし、しきい値を超えるピクセルの合計値を取得するにはどうすればよいですか?

+0

私は上記のように書くのはなぜか分かりませんが、私は 'red_sum'の値のリストを取得していますが、' 'red_sum = red_val.sum()' '数値的な答え。 –

答えて

1

(red > threshold)を実行したとき、しきい値を超える赤色のピクセルがすべて値10になるようなマスクが得られました。値を取得するには、マスクに赤のチャンネルを掛けるだけです。乗算は、しきい値未満のすべての値をゼロにし、しきい値を超えた値を変更しないままにします。これが何をするか、マスキング約SciPy.org documentationから

import numpy.ma as ma 
...  

red_val = ma.masked_outside(red, threshold, 255).sum() 

れる:

コード:

red_val = (red > threshold)*red 
red_sum = sum(red_val) 
+0

完璧!あなたの説明は完璧な意味合いでもあります。非常にうまく機能するとても素朴な方法です。 –

0

私は(総画素値を提供する)仕事が見つかりました別の方法は、マスクされた値を使用することでした:

指定された間隔以外のマスクをマスクします。例では

threshold(私の質問に定義されている)と255の間隔の外側に何を「マスクされ」ているとの画素値の総和を計算するには備わっていません。

関連する問題