ラベル mac の投稿を表示しています。 すべての投稿を表示
ラベル mac の投稿を表示しています。 すべての投稿を表示

2012年7月2日月曜日

ミニチュア写真ふうScript-Fu


ホントは高いところから逆あおりで撮影してみたいところなんだけど...
てもとにある写真をそれらしく。
光軸を傾けて撮影(ティルト、スイング)した画像っぽく見えるように処理してみます。
#光軸を並行にずらす操作(シフト、フォール、ライズ)はムツカシイってば。

写真によっては、実際に光軸を傾けて撮影したものと比べると、とってもつじつまの合ってないことになってるんだろうけども、つじつまの合わないところに注目するよりも、これはミニチュアだ、と強く思うことがダイジ。脳には見たいものが見えるもので。

ところで、あおり撮影ができるレンズはこんな動きをします。楽しい。

傾ける光軸を任意の位置、角度でお手軽に決められるのは、デジタル処理でやってしまうことのメリットではあります。これを実際の撮影で画角を変えずにやろうとすると、けっこう手間取るのではないかなぁ。

 
【レシピ】
  1. 画像をやや明るめに(gimp-curves-spline)
  2. 彩度を上げる(gimp-hue-saturation)
  3. ライティングを工夫(plug-in-lighting)
  4. 任意の軸を中心にぼかす(plug-in-focusblur)

ぼかしの前処理を含めて定番の手順と思います。
処理の順番はこのとおりでなくてもいいのかもしれないけども、今回はトーンジャンプしそうな処理を前に持ってきてみました。 あとの処理で少しでもごまかしが効くことを期待して。

Script-Fuはちょと長くなったので下のほうにのせてます。(へんなところに改行が入ってしまったので、コピーペーストの際はご注意を...)
各パラメータは適当に変えてもらうとして。
gimp-displays-flushをしつこく呼び出ししてるのは、ジブンの環境ではなぜかこうしないとうまく動かなかったから。設定ダイアログを表示せずに、一気に実行すると動くんだけどなぁ。んー。たまたま動いているだけだったり。スクリプトになにか根本的な原因があるのかもしれませぬ。

さてさて、ミニチュアが展示されている様子を想像すると、、、
それは自然光以外で明るめにライティングされているだろうし、実物よりもややディフォルメされて彩度高めで着色されているだろう、っていうことなのかしら。3. はパラメータしだいで周辺の光量を落とすのと近い効果にもなります。

plug-in-focusblurには深度マップを読み込む機能があります。今回はこれを利用してgimp-edit-blendを使って作成したグラデーションを読み込んでいます。
被写界深度を極端に浅くした画像をシミュレートすればミニチュアっぽく見えるようで、そうなると、しっかり作り込んだ深度マップを読み込めばもっとうまくぼかしができるし、何もティルト撮影を真似て軸を設定する必要もないわけで。
でも、そんな手間をかけずに、それらしく見えればそれはそれで。ね。
こんな簡易的な手法でも、けっこう脳をだませてしまうところを楽しんでみました。

と言いながら、何度もこればっかり試してたら、あまりミニチュアっぽく見えなくなってきてしまった。あれ...











Thanks,

hiro

(define (script-fu-miniature-fu img layer tone sat lighting focus-x focus-y focus-angle depth-of-field transition filter-radius s-radius s-threshold)
;(tracing TRUE)
  (let* (
         (tone-curve-points 4)                    ;tunable..
         (tone-curve #(0 0 32 80 80 140 255 255)) ;tunable..

         (width (car (gimp-drawable-width layer)))
         (height (car (gimp-drawable-height layer)))

         (start-x (* width focus-x))
         (start-y (* height focus-y))

         (pi (acos -1))
         (focus-angle-rad (* pi (/ focus-angle 180)))

         (focus-layer (car (gimp-layer-new img width height 0 "focus-layer" 0 0)))

         (pixels-max 0)
         (pixels-min 0)
         (transition-pixels 0)
         (d-x 0)
         (d-y 0)
         (end-x-b 0)
         (end-y-b 0)
         (end-x-f 0)
         (end-y-f 0)
         )

    (if (< width height)
        (begin
          (set! pixels-max height)
          (set! pixels-min width))
        (begin
          (set! pixels-max width)
          (set! pixels-min height))
        )
    (set! transition-pixels (* pixels-max transition))

    (set! d-x (* transition-pixels (sin focus-angle-rad)))
    (set! d-y (* transition-pixels (cos focus-angle-rad)))
    (set! end-x-b (- start-x d-x))
    (set! end-y-b (- start-y d-y))
    (set! end-x-f (+ start-x d-x))
    (set! end-y-f (+ start-y d-y))

    ; start process
    (gimp-selection-all img)
    (gimp-displays-flush)

    ; tone curve
    (if (= tone TRUE)
        (begin
          (gimp-curves-spline layer 0 (* tone-curve-points 2) tone-curve)
          (gimp-displays-flush))
        )

    ; saturation
    (if (> sat 0)
        (begin
          (gimp-hue-saturation layer 0 0 0 sat)
          (gimp-displays-flush))
        )

    ; lighting
    (if (= lighting TRUE)
        (begin
;          Intensity (Light tab in lighting UI): no parameter from script-fu (set to 1.0 as default)
;          ambient-intensity: 'Glowing'
;          diffuse-intensity: 'Bright'
;          diffuse-reflectivity: no control from lighting UI (set to 0.4 as default)
;          specular-reflectivity: 'Shiny'
;          highlight: 'Polished'
;          (plug-in-lighting 1 img layer layer layer FALSE FALSE 0 0 '(255 255 255) focus-x focus-y 0.7 -1 -1 1 Glowing Bright 0.4 Shiny Polished FALSE FALSE FALSE)
          (plug-in-lighting 1 img layer layer layer FALSE FALSE 0 0 '(255 255 255) focus-x focus-y 0.7 -1 -1 1 0 0.6 0.4 0 0 FALSE FALSE FALSE)
          (gimp-displays-flush))
        )

    ; blur
    (gimp-image-insert-layer img focus-layer 0 -1)
    (gimp-displays-flush)
    (gimp-edit-blend focus-layer 0 0 0 100 0 0 FALSE FALSE 1 0 FALSE end-x-f end-y-f end-x-b end-y-b)
    (gimp-displays-flush)
    (define df-curve (make-vector 256 0))
    (define df (* depth-of-field 128))
    (define a (/ 128 (- 128 df)))
    (define b (- 255 (* a 255)))
    (let* ((n 0))
      (while (< n (- 128 df))
             (vector-set! df-curve n (* n a))
             (set! n (+ n 1)))
      (while (< n (+ 128 df))
             (vector-set! df-curve n 128)
             (set! n (+ n 1)))
      (while (< n 256)
             (vector-set! df-curve n (+ (* n a) b))
             (set! n (+ n 1)))
      )
    (gimp-curves-explicit focus-layer 0 256 df-curve)
    (gimp-displays-flush)
    (plug-in-focusblur 1 img layer 1 filter-radius 50 focus-layer s-radius s-threshold) ;Bokeh(behind) 0:Flat, 1:Spherical, 2:Gaussian, 3:Ring, 4:Concave, 5:Brush
    (gimp-displays-flush)
    (gimp-image-remove-layer img focus-layer)
    (gimp-displays-flush)
    )

  (gimp-displays-flush)
;(tracing FALSE)
)

(script-fu-register
 "script-fu-miniature-fu"
 "Miniature Fu..."
 "tonecurve + saturation + lighting + blur"
 "hiro"
 "Copyright (C) 2012 hiro"
 "06/24/2012"
 "RGB*"
 SF-IMAGE "image" 0
 SF-DRAWABLE "drawable" 0
 SF-TOGGLE "tone" TRUE
 SF-ADJUSTMENT "saturation" '(80 0 100 1 10 0 0)
 SF-TOGGLE "lighting" TRUE
 SF-ADJUSTMENT "focus x" '(0.5 0 1 0.01 0.1 2 0)
 SF-ADJUSTMENT "focus y" '(0.5 0 1 0.01 0.1 2 0)
 SF-ADJUSTMENT "focus angle" '(0 -180 180 1 15 1 0)
 SF-ADJUSTMENT "depth of field" '(0.05 0 1 0.01 0.1 2 0)
 SF-ADJUSTMENT "transition" '(0.2 0 1 0.01 0.1 2 0)
 SF-ADJUSTMENT "filter radius" '(11 1 50 1 1 0 0)
 SF-ADJUSTMENT "shining radius" '(3 -1 50 1 1 0 0)
 SF-ADJUSTMENT "shining threshold" '(90 0 100 1 10 0 0)
 )

(script-fu-menu-register "script-fu-miniature-fu"
                         "<Image>/Filters/MyFu")
※GIMP 2.8.0で動作を確認しました。
※期待したとおり動かないかもしれません。
※動かなくても、何が起きても、たとえ悪魔が呼び出されたとしても、責任は取れません...


2012年6月18日月曜日

モノクロフィルムふう Script-Fu


デジタルカメラで撮影したカラー画像をモノクロフィルムっぽく。
GIMPさんにお願い!
(define (script-fu-monochrome-film-fu img layer)
  (let* (
         (copy-layer (car (gimp-layer-copy layer TRUE)))
         (new-mask (car (gimp-layer-create-mask copy-layer 5)))
         )
    (gimp-image-add-layer img copy-layer -1)
    (gimp-layer-add-mask copy-layer new-mask)
    (gimp-curves-spline new-mask 0 8 #(0 192 16 96 64 42 160 0))
    (plug-in-noise-generator 1 img layer 0 0 10 0 0 0)
    (set! layer (car (gimp-image-merge-down img copy-layer 0)))
    (gimp-curves-spline layer 0 8 #(0 0 64 32 200 230 255 255))
    (plug-in-colors-channel-mixer 1 img layer 1 0.299 0.587 0.114 0.299 0.587 0.114 0.299 0.587 0.114)
    )
  (gimp-displays-flush)
  )

(script-fu-register
 "script-fu-monochrome-film-fu"
 "Monochrome Film Fu..."
 "description"
 "name"
 "copyright"
 "date"
 "RGB*"
 SF-IMAGE     "Image"     0
 SF-DRAWABLE  "Drawable"  0)

(script-fu-menu-register "script-fu-monochrome-film-fu"
                         "<Image>/Filters/Test")
※GIMP 2.8.0で動作を確認しました。
※期待したとおり動かないかもしれません。
※動かなくても、何が起きても、たとえ悪魔が呼び出されたとしても、責任は取りません...

Script-Fuについてはこちらを参考にさせていただきました。
GIMP使用のてびき(GIMPスクリプト)
Script-Fu 青空教室(スクリプトの実行方法はこのあたり)
Macの場合、スクリプトは下記に置けばOKみたいです。
~/Library/Application Support/Gimp/scripts


さてさて、粒状感をどうするか、というところから。
しかしながら、これは思った以上に奥が深そうで、そもそも。

こちらのドキュメントがとっても参考になります。
Film Grain, Resolution and Fundamental Film Particles

グレインの霧が晴れたかのように思えた説明を引用させていただきます。
Film grain is the product of the human eye and brain working in combination when viewing very large numbers fundamental image particles
顕微鏡写真(Page 19)を見ると「粒」の形状をなしていない...
たくさんの濃淡の集まりを見るとき、それを表示する大きさによっては、脳が粒状として認識してしまうということかしら。
粒状性の表し方のひとつであるところのRMS粒状度にしたって、濃度のばらつきであって、粒子の大きさ自体の単位ではないのでした。

化学反応極まる銀塩写真を再現することはできないし、
あまり突っ込まずに、それらしく自分の脳をだましておくことにしよう。


それらしく、に注力するとして、何か参考になるものは...
ということで、フィルムスキャナでスキャンした画像を観察してみました。
バス停の横の看板のあたりを等倍表示すると、、、
これは、いわゆる粒状として期待されているようなテクスチャに見えませんか?
はい。見えます。

粒状性は露出、現像のしかたによって、ずいぶん変わるようです。
デジタル化する際には、スキャンする解像度でもその見え方は変わってきます。
なので、これはあくまで、この写真をこのスキャナの解像度でスキャンしたときの雰囲気を再現するための試行、くらいの意味しかないので。

さてさて、明るさの違う場所でいくつかヒストグラムをとってみました。
Mean 211.9 / Std dev 10.7
 Mean 141.7 / Std dev 10.7
 Mean 100.8 / Std dev 9.2
 Mean 37.4 / Std dev 4.9

ノイズは正規分布っぽく、標準偏差の変化もなんとなく想像してたのと近い結果です。ネガポジ変換が行われて、ガンマがかかって、さらにスキャナ自体のノイズの影響もあるだろうし、ちっとも正確なデータではないんだけども。そこは。
こういったノイズを再現すれば何となくそれらしく見える。かも。と言い聞かせつつ。


【レシピ】
  1. ガウスノイズを加えた画像を生成
  2. 元画像にノイズ画像を混ぜる(暗いところはやや控えめに)
  3. コントラストを強めに
  4. モノクロ画像に変換
Script-Fuでやってるのはこれだけです。(スクリプトでは一部処理の順序が前後しています。)

GIMPさんの機能を呼び出しているだけなので、手動でも同じことができます。
お好みで下記のパラメータを調整するのがいいかと。
  1. FIlters->Noise->Noise generatorでガウスノイズの標準偏差を変える
  2. マスクのトーンカーブ(Colors->Curves)で明るさに応じたノイズの量を調整
  3. Colors->Curvesで好みのコントラストに
  4. Colors->Components->Channel MixerでRGBの比を調整
※モノクロ化は最後に。入出力が同じビット深度の画像でコントラストを調整すると、だいたいトーンジャンプが起こるんだけど、RGBを混合するときにある程度はごまかせます。たぶん。


Thanks,

hiro

2012年4月15日日曜日

MacでRMAA: Apogee Duet2 (再測定)


オーディオインターフェイスとして、さらにヘッドフォンアンプとして、ゴキゲンに活躍中のDuet2くんです。

どれくらいゴキゲンか定量的に調べる方法はないものかしら。

ということで始めたRMAAを使った測定。
前回は、まぁこんなもんかーっていう結果でした。
やっぱりbalanced入出力でも試したいなー、と思いつつ時は過ぎ。

やっとXLR to 1/4'' TRS Connectorが入手できたので、 再測定してみました。

【結果発表】
Duet2 RMAA 24bit 44.1kHz (balanced)
Duet2 RMAA 24bit 48kHz (balanced)
Duet2 RMAA 24bit 96kHz (balanced)

注意
あくまで、うちの環境でわりかし適当に測定してみた結果です。
再生と録音がRMAAの想定しているとおりに正しく行われている確証はありません。
Duet2くんの実力全開かどうか分からない、ということです。


THD + Noiseなど全般的に良くなったようです。balanced入出力の効果アリと思っていいかと。
それでこそ、この測定以外に使わなさそうなコネクタを入手した甲斐があったというものだ...

残念ながら周波数特性の傾向は変わりませんでした。
測定方法に問題がある可能性もあるなぁ...


Thanks,


hiro

2012年2月13日月曜日

MacでRMAA: Apogee Duet2



オーディオインターフェイスとして、さらにヘッドフォンアンプとして、ゴキゲンに活躍中のDuet2くんです。

どれくらいゴキゲンかと言うと、、、

いやいや、音をコトバで表現するのはムツカシイし、そもそも言葉を尽くせば尽くすほど疑わしく感じるような気も...

定量的に調べる方法はないものかしら。

オーディオインターフェイスの評価といえば、RMAAが思い浮かぶんだけど、これはWindows用のソフトウェア。Duet2はMacでしか動かない。
むむむー、と、思いながら調べていたところ、意外とMacでも測定でけそうな!?

ということで試してみました。

 
【結果発表】
Duet2 RMAA 24bit 48kHz
Duet2 (Soft Limit on) RMAA 24bit 48kHz

注意
あくまで、うちの環境でわりかし適当に測定してみた結果です。
再生と録音がRMAAの想定しているとおりに正しく行われている確証はありません。
Duet2くんの実力全開かどうか分からない、ということです。

MacでもRMAAを使って測定できるのではないか、というところから始まったお遊び程度と思っていただければ。と思いまする。

いつもギターの録音に使っている設定です。
適当にやってみたわりに、それっぽい。

ただ、周波数特性だけは、なんでだろなーとも思ってます。10k超えたあたりが波打ってて、このせいでスコアが下がってるみたい。気になる気になる気になる...
せっかくバランス出力できるのに、TSケーブル使ったからかな。
そもそも再生録音が正しくできていないのかも。(後述)
といろいろと考え中。

Soft Limitを使った場合についても測定してみたところ、なかなか残念な結果に...
同じ環境で、Soft Limit on/offを切り替えただけなので、これはこれでおもしろい比較結果と言えるかも。
Soft Limitはドラムなんかの録音に使ってね、とのことなので、入力レベルの変化が素早く大きい楽器を録音しようとしたときに起こりがちな瞬間的なクリップを上手に処理してくれるのかなーと思ってます。自宅でギターの録音するときはoffでいいかなっと。


【レシピ】
  • RMAA
  • Audacity
  • Wine

RMAA
ダウンロードはこちら。
そもそも今回の試みはこの投稿をみて思い立ったのでありました。
テスト信号をMacで録音して、Windowsで解析すればいいよーっていうことです。

なるほどっ!

つまり、こんな手順。RMAAが自動でやってくれるところを一部手動でやってあげることになります。
  1. RMAAのテスト信号をファイル(WAV)に出力 => イチバン左のボタン
  2. Macで別のソフトウェアを使ってテスト信号を再生しながら録音(オーディオインターフェイスの出力を入力にループバック)
  3. 録音結果(WAV)をRMAAで解析 => 左から2番目のボタン


Audacity
テスト信号を再生しながら録音する方法はいろいろあるんだろうけども、今回はAudacityを使わせていただきました。さくさくっと使えます。

気になってるところ。

今回使ったRMAAのテスト信号は24bit intのWAVファイルです。
これをインポートすると、いったん32bit floatになってしまうようです。Audacityがこれを再生するとき、オーディオインターフェイス(24bit intに設定)に送るデータがどうなっているのか、詳細が分からないのでした。
インポートしたデータをそのままエクスポート(24bit intに設定)したところ、もとのWAVとバイナリ一致したので、おそらく再生時にオーディオインターフェイスに送られているデータにもへんなことは起こってないと思うんだけど。

ただし、16bit intでエクスポートする場合には、量子化ビット数変換時のDitherに関するバグが報告されているので注意が必要かもしれません。

こんなこともあって、 今回の測定のための再生と録音が、ほんとうに正しく行われているか確証が持てていないのでありました。


Wine
測定をMacだけで完結させるため、WineでRMAAを動かしてみました。
Wineを動かすために、ひきつづきWineBottlerを使わせていただいてます。
RMAAのインストールはインストーラをクリックするだけでOK。

RMAA起動時「CKsEnumFilters::EnumFilters failed」っていうエラーダイアログが出ます。
そのままOKで起動したので、気にしないことにしよう...

それから、起動時「Initializing sound card...」のままフリーズすることがありました。その場合は、WineとX11をいったん終了してから再起動すれば大丈夫みたいです。

WineでRMAAが動くなら、測定もRMAAでやればいいやん、、、
と思ったのだけど、上記のようなエラーも出ることだし、オーディオインターフェイスのような周辺機器とのやりとりを行うプログラムは、ネイティブで動かすのに越したことはないかなー、ということで、今回はこんな方法で。


Thanks,

hiro

2012年1月22日日曜日

VSTAU Manager: VSTをAUで

Logic ProやGarage Bandでは、その追加モジュールの規格としてAudio Units (AU)が採用されております。
こういった規格で広く普及しているのはVSTだけども、Mac向けに公開されているVSTではけっこうAU版が用意されていることも多いです。とはいえ、たまーにVSTしかないよーってこともあります。

こんなの。

SteinbergがAUを出さないのはしかたなす。けれども、せっかく太っ腹に公開していただいているのだし、使ってみたい。

そんなときにっ!

VSTAU Manager

2012年1月4日に新しいバージョンがリリースされておりました。

インストール、と言っても、ダウンロードしてzipを伸張するだけで、実行ファイル「VSTAU Manager」が出てきます。お好みでアプリケーションフォルダに移動。

実行するとインストールされているVSTのスキャンが始まります。

こんなかんじのリストが出てくるので、、、

インストールしたいVSTを選んで「Install」ボタンを押せばOK!(commandもしくはshiftを押しながら複数選択可)
アンインストールしたいときも同様にリストから選んで「Uninstall」。左の「Status」メニューから個別に変更することもできます。
How Easy :-)

自動的にVSTのWrapper AUを作ってインストールしてくれる仕組みになっているようです。Wrapperは下記に置かれていました。
/Users/あなたのユーザ名/Library/Audio/Plug-Ins/Components


すべてのVSTが完璧に動くというわけではないようで、たとえば、VST Classics Vol.1のModel Eは動いてないみたいです。
Model Eは0入力8出力らしく、このような入出力チャンネル数のVSTを想定してなかったみたい。すぐには実装できないかもー、とのことでした。
Problem with Steinberg's VST Classics 1 (Model E Soft Synth) in Logic

とはいえ、こうして開発を続けてくださっているだけでもありがたいことだなー。


Thanks,

hiro


2011年12月4日日曜日

mac + wav + cue => mp3

Wineとfoobar2000のおかげでmac miniくんでもwav + cueの再生ができるようになりました。
しかしながら、持ち運べるガジェットさんたちにおいて、なかなかそれらの再生はムツカシイのです。
ということで、重い(さらに痛い)腰を上げて、mp3にdecodeすることにしました。

むむーっとgoogleせんせーにお伺いしたところ、、
すばらしくピッタリなソフトウェアがっ!

X Lossless Decoder / Lossless audio decoder for Mac OS X

開発者のかたに深く感謝です。

decoderなのですがdecode後の変換フォーマットを選ぶことができます。およそメジャーなフォーマットはカバーされていて、もちろんwav + cueをmp3にencodeすることができます。
重い腰があっという間に軽くなるってばこれ。

今回はGUI版を使わせていただきました。
wav + cueを一気にmp3に変換するにあたって下記を設定。

【General】
  • Output format: LAME MP3(うちのwavファイルさんたちだとVBR 135kbpsでもとの1/10くらいのサイズに。)
  • Output directory: Specify(mp3を出力するディレクトリを設定)
  • Format of filename: Specify: '%A/%T/%n %t' ('Output directory'にアルバムアーティスト名フォルダ、その下にアルバムタイトル名フォルダを作って、'トラック番号 曲名.mp3'を出力)
  • Character encoding of cuesheet: Japanese (Auto-detect)(日本語の含まれるcueはUTF-8(BOM付)。日本語の含まれないcueと混在していても自動検出でうまくいくようです。)
  • Maximum #Threads: 2(うちのmac miniくん(i5 2.3GHz 2コア)ではencodeを走らせながらあまり重くない作業ができました。encodeスピードもそこそこ。Hyper Threadingにはあまり期待せず、コア数くらいにしておくのでちょうどいいのかも。)

【Batch】
  • Restrict files to open with extension: cue(wavとcueを同じフォルダに置いている場合、そのままだとwavがだぶってencodeされてしまうので、cueだけを開くように設定)

あとは、FileメニューのOpenからwav + cueのあるフォルダを選べばOK。
ファイルが大量にあったせいか、しばらくアプリケーションからの応答がなくなってしまったのですが、気長に待っていると、Progressウィンドウに曲名のリストが表示されて、えいえいっとencodeが走り始めます。
うちだけかもしれないけども、command + HでProgressウィンドウを隠そうとしたら、そのまま止まってしまったようです。見守るだけにしておくのが吉かも。

Thanks,

hiro