Julia でヒストグラム ― 2016年02月02日 19:30
話は前後するが、Julia でヒストグラム表示をやってみたのでメモ
イメージの読み出しが load() になった。読み出すと Image 構造体に読み込まれるので、その中から data() で画像データのみを取り出す。取り出した data は、RGB 構造体の配列なので、reinterpret () で UInt8 の配列に変換する。これで、3 x 横 x 縦 サイズの UInt8 の配列に取り出せる。
さらに、RGB に分離する。前記 UInt8 配列のうち、1次元目はR/G/B をあらわしているので、R のみ取り出すには [1,:,:] を指定する。このままでは3次元の配列なので2次元にするために、先頭の次元を squeze で削除する。これでやっと2次元の R が取り出せる。(結構面倒くさい)
続いてヒストグラム生成。2次元のままだと(所望の)ヒストグラムが取れないので、reshape で1次元に並び替える。squeeze とは違うので注意(前述の次元削除も reshape で出来ないこともないけど)。
これでやっとヒストグラムが取れる。hist(v, e) の書式で、v はヒストグラムを取るベクトル(1次元の配列)。e は幅指定で、-1:255 で 0から255の範囲をヒストグラム化。1番目の範囲は、-1より大きく、0以下。255番目の範囲は245より大きく、255以下が含まれる。
ちなみに、-1:16:255 でヒストグラムの幅を16ずつとかに出来る。edge と 分布が返ってくる。
ヒストグラムが出来たので、グラフに描いてみる。ここでは、描画パッケージとして Winston を使用。
Histogram() でグラフのオブジェクトを作成、FramedPlot() は、描画用のウィンドウの作成。add() で、ウィンドウにグラフオブジェクトを追加。これでヒストグラムが表示される。
やってみてわかったのだが、UInt8 のまま hist() を呼ぶと動作がおかしい。* 1.0 で Float64 に変換しているのはそのため。理由は不明・・・
UInt8 のままで画像処理をするといろいろ面倒なので、最初に RGB 変換時に Float に変換したほうがいいかも知れない。
イメージの読み出しが load() になった。読み出すと Image 構造体に読み込まれるので、その中から data() で画像データのみを取り出す。取り出した data は、RGB 構造体の配列なので、reinterpret () で UInt8 の配列に変換する。これで、3 x 横 x 縦 サイズの UInt8 の配列に取り出せる。
さらに、RGB に分離する。前記 UInt8 配列のうち、1次元目はR/G/B をあらわしているので、R のみ取り出すには [1,:,:] を指定する。このままでは3次元の配列なので2次元にするために、先頭の次元を squeze で削除する。これでやっと2次元の R が取り出せる。(結構面倒くさい)
続いてヒストグラム生成。2次元のままだと(所望の)ヒストグラムが取れないので、reshape で1次元に並び替える。squeeze とは違うので注意(前述の次元削除も reshape で出来ないこともないけど)。
これでやっとヒストグラムが取れる。hist(v, e) の書式で、v はヒストグラムを取るベクトル(1次元の配列)。e は幅指定で、-1:255 で 0から255の範囲をヒストグラム化。1番目の範囲は、-1より大きく、0以下。255番目の範囲は245より大きく、255以下が含まれる。
ちなみに、-1:16:255 でヒストグラムの幅を16ずつとかに出来る。edge と 分布が返ってくる。
ヒストグラムが出来たので、グラフに描いてみる。ここでは、描画パッケージとして Winston を使用。
Histogram() でグラフのオブジェクトを作成、FramedPlot() は、描画用のウィンドウの作成。add() で、ウィンドウにグラフオブジェクトを追加。これでヒストグラムが表示される。
やってみてわかったのだが、UInt8 のまま hist() を呼ぶと動作がおかしい。* 1.0 で Float64 に変換しているのはそのため。理由は不明・・・
UInt8 のままで画像処理をするといろいろ面倒なので、最初に RGB 変換時に Float に変換したほうがいいかも知れない。
# image 読み込み
using Images
img= reinterpret(UInt8,data(load("SleepingCat.bmp")))
red = squeeze(img[1,:,:], 1)
green= squeeze(img[2,:,:], 1)
blue = squeeze(img[3,:,:], 1)
# Histogram 生成
data1d= reshape(green, length(green)) * 1.0
(edges, counts)= hist(data1d, -1:255)
# Winston の機能
using Winston
h= Histogram(edges, counts)
p= FramedPlot()
add(p, h)
コメント
_ chocolate ― 2018年05月02日 17:02
_ choc ― 2018年05月04日 05:04
I think the admin of this web site is actually working hard in favor of his website, as here every data
is quality based information.
is quality based information.
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
トラックバック
このエントリのトラックバックURL: http://marusu.asablo.jp/blog/2016/02/02/8007232/tb
Its very well written