実現したいこと
Pythonの画像処理ライブラリOpenCVを使って、シワを検出・色塗りした画像を生成するコードを作成したいと考えています。
ジャストアイデアでも良いですし、この技術使える・このアルゴリズムは参考になるかも程度でも嬉しいです。とにかくシワのみを検出するアルゴリズムを考えたいです。
画像は以下のようなイメージのものです。
発生している問題・分からないこと
シワを検出する良いアルゴリズムが思いつかない。
該当のソースコード
python
1import numpy as np 2import cv2 3 4# 画像読み込み 5img = cv2.imread('何か.png',0) 6clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 7cl1 = clahe.apply(img) 8 9# マスク画像作成 10height = img.shape[0] 11width = img.shape[1] 12center_w = height//2 13center_h = width//2 14R = 2 15 16mask = np.ones([height, width]) 17 18for i in range(0, height): 19 for j in range(0, width): 20 if (i-center_w)*(i-center_w) + (j-center_h)*(j-center_h) < R*R: 21 mask[i][j] = 0 22 23# フーリエ変換 24f = np.fft.fft2(cl1) 25fshift = np.fft.fftshift(f)*mask 26magnitude_spectrum = 20*np.log(np.abs(fshift)) 27 28f_ishift = np.fft.ifftshift(fshift) 29img_back = np.fft.ifft2(f_ishift) 30 31img_real = np.real(img_back) 32img_real = 255 * (img_real - img_real.min()) / (img_real.max() - img_real.min()) 33img_uint8 = img_real.astype(np.uint8) 34 35_, thresh_img = cv2.threshold(img_uint8, 110, 255, cv2.THRESH_BINARY) 36 37# 以下、ノイズ除去として一定の面積以下を削除など入れようと考えている。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
現状考えている内容は、
・適用的ヒストグラム平坦化:シワを強調させるため
・フーリエ変換、ハイパスフィルタ:シワのエッジ抽出のため
・ノイズ除去
のような流れでうまくいかないか模索中。
補足
参考サイト
・https://qiita.com/syukan3/items/bb44905bafd85b67789d
・https://vigne-cla.com/25-2/ (画像はこちらを拝借)
・https://qiita.com/tanaka_benkyo/items/bfa35e7f08faa7b7a985
・https://qiita.com/fugunoko/items/41c33ca163c7bb52d283
あなたの回答
tips
プレビュー