アイエスエス株式会社 "Innovative System Solutions"
Retinexをpython+OpenCVでお手軽に味見する
- 2011-12-28 (水)
- 技術
認識処理の前処理でSingle scale retinexをチョットかけてみたいなあというときにお手軽にPythonで実装してみようというお話です.
私が使っているのは Python2.7.1(Windows) + OpenCV2.3.1です.
OpenCV2.3系になってPythonでの使い勝手が更に向上したと感じています.
画像も行列もNumpyのarrayで統一されているので,あれもこれも,気持よく処理できます.
ますますCやC++を使うのが億劫になりそうです.
Retinexについては,ネット上に詳しい資料がたくさんあるので説明は省略させて頂きますが,恥ずかしながら私の書いたPythonスクリプトを参考用に載せておきます.
このスクリプトで処理した画像の例は次の通りです.
左側にいる歩行者がなんとなく確認しやすくなったかもしれません...
本物はGaussian使うべきなのでしょうが,認識の前処理ならBlurでも問題なかったりしますよね.
pythonスクリプトのコメントアウトを外せば確認できます.
スピード命のご時世ですので,処理内容はいつも手抜きと骨抜きの方向でございます.
#------------------------------------------------------------------------------- # Name: Retinex Test # Author: Tomoya Kamata (kamatomo@japan-iss.co.jp) # Created: 26/12/2011 # Copyright: (c) 2011 ISS Inc. #------------------------------------------------------------------------------- #!/usr/bin/env python import cv2 import numpy as np from math import * def main(): cv2.namedWindow('source') cv2.namedWindow('result') img = cv2.imread("source.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) g1 = (gray + 1.0) / 256.0 g2 = (cv2.GaussianBlur(gray, (201, 201), 100) + 1.0) / 257.0 #g2 = (cv2.blur(gray, (51, 51)) + 1.0) / 256.0 #こっちのほうが軽い g3 = cv2.log(g1 / g2) #Retinecs #正規化してみる g3_min, g3_max = g3.min(), g3.max() g4 = ((g3 - g3_min) / (g3_max - g3_min)) * 255.0 #uint8にキャスト result = np.zeros(g4.shape, dtype=np.uint8) result += g4 #画像を保存するならコメントアウト #cv2.imwrite("gray.jpg", gray) #cv2.imwrite("retinex_out.jpg", result) cv2.imshow("source", gray) cv2.imshow("result", result) cv2.waitKey(-1) cv2.destroyAllWindows() if __name__ == '__main__': main()T.Kamata
Cat Face Transform (CFT)
画像データを圧縮したり特徴量を計算したり…等といった方法について調べていると「直交基底関数群を用いて云々~」という話を見かけることがあるのですが,数式アレルギーな私にとって,そういった直交関数群とやらの数式は大抵,一見した瞬間に逃げ出したくなるような様相を呈しており…
…というわけで,心理的な障害を乗り越えるために,複雑な数式のかわりに,猫の顔画像を用いて画像からの特徴ベクトル(?)抽出→特徴ベクトルから画像復元...みたいなのをやってみました.にゃーん.
用いた猫画像群については,最初の3つはうちの猫,残り30はネット上から拾ってきた画像なのですが,グラムシュミットの直交化のせいで,最後の方は猫画像なのかどうかわからなくなってしまっています.
せっかくの猫画像がノイズ画像みたくなってしまうのでは何のための猫だったのか.心情的に好ましくなく,改善が望まれます.
もっと大量の猫画像群(一般的なPCのHDDには猫画像の100や200は保存されている)から,元から互いに内積が0に近い猫画像セットを選抜して使うとかすれば有る程度改善できるかもしれません.
(あるいは他の直交化の方法を探すとか…?)
by nakiusagi3