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)
スクリーンショットを撮るアプリ ― 2016年02月04日 20:17
グラフを出したり、処理結果を表示したりした時に、それを比べたい時がある。パラメータをいろいろ変えて、試してみているんだけど、さっきと比べてどう違ったのか?
そんな時に、スクリーンショットを撮って比べていた。
Windows だと、PrintScreen キーを使って、スクリーンショットを撮ることができるけど、撮ったスクリーンショットは、クリップボードに記憶されるので、ペイントとかに貼り付けて見ていた。[alt]+[PrtScn] で撮って、ペイントを立ち上げて、[ctl]+[v] で貼り付けて・・・面倒くさい。
「スクリーンショットを自動的に保存!」 みたいなソフトはあるんだけど、結局その画像を開かないといけないし・・・
スクリーンショットを撮ったら表示だけしてくれるソフトがないかと探したんだけど見つからない。そんなことするやついないのかなぁ・・・
自分で作ればいいんだけど、ウィンドウズのアプリはむかーし、Delphi で作って以来。コンソールアプリは作るけど、UI系は面倒だし、キーイベントのフックとかどうやればいいか分からないし・・・と落ち込んだんだけど、落ち込んでいても始まらないので、
アプリを作ってもらった。作ったんじゃなくて、作ってもらった。
ワンコイン(500円)でいろいろと願い事を聞いてくれるってサービス、ココナラ。
bootstrap さんってかたにお願いした。アプリのプログラミングしてる人ならチャチャっと書けちゃうんですね、こんなのが。
で、出来たのがこちらになります。
(ログインしろって言われるけど、気にせず×押してからダウンロードしてね。)
すごいよ、[alt] + [PrnScn] だけでウィンドウのスクリーンショットが撮れて、新しいウィンドウに表示されるよ。これは便利!
ココナラのサービスもだけど、こんなアプリが簡単に書けちゃうなんてかっこいいよね~
そんな時に、スクリーンショットを撮って比べていた。
Windows だと、PrintScreen キーを使って、スクリーンショットを撮ることができるけど、撮ったスクリーンショットは、クリップボードに記憶されるので、ペイントとかに貼り付けて見ていた。[alt]+[PrtScn] で撮って、ペイントを立ち上げて、[ctl]+[v] で貼り付けて・・・面倒くさい。
「スクリーンショットを自動的に保存!」 みたいなソフトはあるんだけど、結局その画像を開かないといけないし・・・
スクリーンショットを撮ったら表示だけしてくれるソフトがないかと探したんだけど見つからない。そんなことするやついないのかなぁ・・・
自分で作ればいいんだけど、ウィンドウズのアプリはむかーし、Delphi で作って以来。コンソールアプリは作るけど、UI系は面倒だし、キーイベントのフックとかどうやればいいか分からないし・・・と落ち込んだんだけど、落ち込んでいても始まらないので、
アプリを作ってもらった。作ったんじゃなくて、作ってもらった。
ワンコイン(500円)でいろいろと願い事を聞いてくれるってサービス、ココナラ。
bootstrap さんってかたにお願いした。アプリのプログラミングしてる人ならチャチャっと書けちゃうんですね、こんなのが。
で、出来たのがこちらになります。
(ログインしろって言われるけど、気にせず×押してからダウンロードしてね。)
すごいよ、[alt] + [PrnScn] だけでウィンドウのスクリーンショットが撮れて、新しいウィンドウに表示されるよ。これは便利!
ココナラのサービスもだけど、こんなアプリが簡単に書けちゃうなんてかっこいいよね~
最近のコメント