Gimp-Pythonで法線推定/法線マッピング(環境マッピング)

Blenderなどの3DCGソフトには、法線マッピングとか環境マッピングという機能があります。これをGimpでマネしたプラグインを(Pythonで)作ってみました ついでに、静止画の画素の明るさから法線(面の向き)を推定するプラグインも作ってみました実行例

Anaconda自体の短い説明

まず 必要であれば 科学計算パッケージ全部入りのPython、Anacondaの Py2.7版32bitを入れます もう一度書きますがたいていのひとには必要ありません 「Anaconda インストール」をGoogleる 500MB程度と けっこうでかいです。 Anacondaの公式サイト入れたこと…

やりかた 

pthファイルを使います Portable Blenderなどでも同様の方法が使えると思いますがためしてませんGimp Portableに付属してくるPythonの Lib/site-packagesフォルダ内に、以下のような内容で anaconda2.pthという名前のファイルを作成 c:\anaconda2\lib c:\ana…

はじめに

殆どのかたには必要無い記事です。ここで引き返すことをお薦めします。

プラグインのソース

import os,sysfrom gimpfu import * def dist(image): #from common import Sketcher #image=gimp.image_list()[0] layer=active_layer = pdb.gimp_image_get_active_layer(image) sel=pdb.gimp_image_get_selection(image) assert layer.width==sel.width a…

制限

選択中のレイヤーに描画します 描画結果にアンドゥーが効きませんので、あらかじめ新規レイヤーを用意してください 画像のサイズとレイヤーのサイズが同じときだけ描画されます (プログラム短縮のため)

使い方

下のプログラムを テキストエディタで dist.py という名前で Gimp Portableのプラグインフォルダ ( GIMPPortable\App\gimp\lib\gimp\2.0\plug-ins ) に保存します次回 Gimp Portableを起動すると コンテクストメニューの 「 フィルター → 下塗り → dist 」 …

gimpへの opencvのインストール

よくわからなかったので パスが通ったところ (GIMPPortable\App\gimp\bin プラグインフォルダ(GIMPPortable\App\gimp\lib\gimp\2.0\plug-ins Gimp Portableに付属してるpythonのライブラリフォルダ (G:\bin\GIMPPortable\App\gimp\Python\Lib\site-packages …

事前に必要なもの

オープンソースなペイントソフト Gimp 今回はwindowsなので Gimp Portable を使用 pythonのnumpyモジュール Unofficial Windows Binaries for Python Extension Packagesで一番上のpy2.7用32bit版(numpy‑1.10.1+mkl‑cp27‑none‑win32.whl)をダウンロード、拡…

サンプル

こんな感じの画像を作ります応用例 文字 にdistフィルタとバンプマップフィルタ フリーフォント『たぬき油性マジック』使用※ blender使ったほうが早いような気もしなくも

gimp-pythonをつかって選択領域に「もっこり」した感じの画像を描画

超ひさしぶりに gimp から opencvを使ったプラグインを書いてみました<<追記>> numpyモジュールの入れ方を追記

SimpleHTTPServerでクライアントをIPアドレスで制限してみた

PythonでちょっとしたHTTPサーバ立てたいときの定番モジュールSimpleHTTPServerですが、接続するクライアントを制限する機能が付いてない。 昨今色々と物騒なので、特定の端末からのみ接続できるようにしましたむしろ何か認証とかhttpsなちゃんとしたサーバ…

jsでスタックをTypedArrayで組んでみる

ちょっと煮詰まってるので現実逃避。javascriptで配列の数を制限したい (スタック・オーバーフロー)こちらをTypedArrayで書いてみました。実行例 stack=new Stack(3) stack.pop()Error: stack emptystack.push(1) stack.push(2) stack.push(3) stack.push(4)…

Nim (Nimrod) で hello world (alt.js編)

Nim言語がちょっと前に微妙に話題になってたので少し触ってみました。 ターゲットとしてjavascriptが選べる=alt.jsとしても使えるようです。コンパイラの導入などはこちらの日本語記事が詳しいです。 Nimの紹介 − Python風静的型付言語 〜コンパイラと型推…

ステレオ音声を複素平面で考える

今年もよろしくお願いしますFFTをあらためて勉強してての思いつきをメモ 図を描いてると寝られなくなるのでわかりにくくてすんません スピーカー2個の角度が90度になるように配置 これを聞く人間の耳とかマイクのかわりに、スピーカーからの射線の交差点に …

というわけで、Pythonで検算してみた

フィボナッチ数列の場合、Aは正則です。N+1番目のフィボナッチ数列を調べるばあい、末尾再帰 F :- F( A X)が N 回呼び出されますが、行列 A の N 乗 と ベクトル X の積と、Fの結果が一致します。 今回は素直にnumpyで行列のN乗を使ってますけれども、 スペ…

Aが正則でない場合

フィボナッチ数列の場合、Aは正則です。が、ちょっと脱線して、Aが正則でない場合を考えるに、X = A Xを繰り返すことで、XはAの固有値が最大になる固有ベクトル(の倍数)に近づいていきます。(べき乗法) 。。。って、放送大学 「数値の処理と数値解析('1…

行列のべき乗

そう考えると、ならばとなります。というわけで、線形代数を使うと、(若干手間はわかかりますが) 再帰を行列のべき乗に代替したり、再帰関数が終了するかどうかを比較的容易に判定することが出来る、はずです

複数の引数 → ベクトル渡しだと考える

たとえば、フィボナッチ関数を考えます 例によって 変な擬似言語 F(0 x1 x2) :- 0 F(0 x1 x2) :- x2F(x,y) :- F(n-1,x2,x1+x2) で、ここで引数を n次のベクトルだと考えてみます X={n x1 x2 1} ベクトル F( [0 x1 x2 1]) :- 0 #ベクトルXの第1要素が0 F( [1 …

再帰関数の停止問題 その3 引数がベクトルの場合

今回は再帰関数を、行列のべき乗に直してみます。その3とか書いてあるけど、記事が増えたので適当にナンバリングしてみただけです。(雑)

たらいまわし関数 竹内関数

逆に、隣接行列だけ見ても さっぱり 終わるのか無限ループになるのかわからない例説明は 竹内関数 wikipedia参照これも隣接行列を書いてみます。 関数一個だけなので 逆にわかりにくい気もしますが。 Tak(X,Y,Z) :- X Tak(X,Y,Z) :- return Tak(Tak(X-1,Y,Z)…

ハノイの塔

なんちゃってPrologっぽく書いてあるけど、Prologでは動かない擬似コード。 ハノイの塔 (1 スタート ゴール 空き 手順) :- 手順=[ (スタート.ゴール) ]. ハノイの塔 (n スタート ゴール 空き 手順) :- ハノイの塔(n-1 スタート 空き ゴール 手順1) , ハノイ…

フィボナッチ数列

次のような末尾再帰の関数によってフィボナッチ数列を計算する場合を考えます 0番目のフィボナッチ数は0 再帰によってNが1になったらX2を返す Fib (0,X1,X2) :- 0. Fib (1,X1,X2) :- X2. Fib (N,X1,X2) :- Fib(N-1, X2,X1+X2).たとえば、7番目のフィボナッ…

停止性問題と、関数の隣接行列

概略)注)こういうのに興味が出てきたら、Haskell使ったほうがいいのかも、と思えてきたけど数学苦手なのでHaskellのドキュメント読んでもさっぱりわかりませんプログラムがちゃんと終了するかどうか、関数の隣接行列によって調べることを考えます 関数の中…

ハノイの塔 テスト

#エントリーポイント def hanoii(n): if isinstance(n,(int)) and n>0: return hanoii_main(1,2,3,n=n) else: raise Exception assert hanoii(1) == [(1,2)] assert hanoii(2) == [(1,3),(1,2),(3,2)] assert hanoii(3) == [ (1,2),(1,3),(2,3),(1,2),(3,1),…

コード

ちっちゃい! コメントのほうが多い! # -*- coding: utf8 -*- "kwmatch.py PUBLIC DOMAIN" class KwMatch(object): #引数の型によって比較関数切り替え cmps={ type:lambda x,y:isinstance(x,y), slice:lambda x,y:y.start set:lambda x,y:x in y, } def __…

サンプルコード

Py2 Py3 ともに動作確認済み ハノイの塔 すっきり! # -*- coding: utf8 -*- from __future__ import print_function from kwmatch import KwMatchif __name__=="__main__": hanoii_main=KwMatch() @hanoii_main.case(n=1) #1枚のとき def _(start,goal,res…

python 関数のオーバーロード (キーワード引数の値編)

pythonにて(Prolog風に?)引数が特定の値になったときに、呼び出す関数を切り替えるクラスを書いてみました。 値によるマッチングで、ハノイの塔などもすっきり 値は 範囲や集合に含まれるかもチェックできる 型チェックなどにも使える (前回書いたのより…

python 関数のオーバーロード (型 引数の数編)

pythonにて、 JAVAとかC++風味に、関数の引数の型とか数によって、呼び出す関数の本体を切り替えるためのデコレータ書いてみました先に、サンプルを兼ねたテストコード(長くなったのでさわりだけ) Py2 Py3 ともに動作確認済み同じ addという名前の関数です…

組み合わせを生成するジェネレータ

[0,[1,2,3], [4,5]]のような入力から、 [0,1,4], [0,1,5] , [0,2,4] , [0,2,5] , [0,3,4] , [0,3,5]と、全ての組み合わせを生成するジェネレータがPythonで必要になったので書いてみた (本当はタプルで返したほうがよい)ちょっと書くのに時間がかかったので…