前提・実現したいこと
画像のフィルタリング処理を行いたいが、サンプルコードとの差分が分からない。
サンプルコードではうまく輪郭を検出できているが、自分のものでは、真っ黒になってしまう
ソースコードのdef stack_filtering の部分をサンプルコードのものに置き換えるとうまく動作する(def stack_filtering_2 がサンプルコードのコピペ)
発生している問題・エラーメッセージ
エラーメッセージはなし plt.imshow(laplasian_img)の画像が真っ黒になる
該当のソースコード
python
1import numpy as np 2from PIL import Image 3from matplotlib import pyplot as plt 4%matplotlib inline 5 6plt.figure(figsize=(8,8)) 7 8img= Image.open('images.jpg').convert('L') 9img= np.array(img, dtype=np.float) 10plt.imshow(img, cmap='gray') 11 12def stack_filtering(img, kernel): 13 h, w=img.shape 14 stack_img = np.zeros([9, h+2, w+2]) 15 16 offsetx, offsety = np.meshgrid([0,1,2],[0,1,2]) 17 offset_index=np.stack([offsety.flatten(), offsetx.flatten()], axis=1) 18 #offset_index: [[0,0],[0,1],[0,2],[1,0],...,[2,2]] 19 20 kernel = kernel[::-1, ::-1] 21 22 for simg, idx in zip(stack_img, offset_index): 23 yidx, xidx =idx 24 simg[yidx:yidx + h, xidx:xidx + w] = img[:, :] 25 26 stack_img = stack_img.transpose(1,2,0) 27 kernel = kernel.flatten() 28 29 filter_img = np.matmul(stack_img, kernel) 30 31 return filter_img[1:-1, 1:-1] 32 33#サンプルコードのもの 34def stack_filtering2(img, kernel): 35 """ 36 原画像をスタックして空間フィルタ処理を行う 37 :param img: 原画像 38 :param kernel: 3x3カーネル 39 :return: フィルタ処理の結果画像 40 """ 41 h, w = img.shape 42 stack_img = np.zeros([9, h + 2, w + 2]) # 8近傍+自身で9チャネル 43 44 offsetx, offsety = np.meshgrid([0, 1, 2], [0, 1, 2]) 45 offset_index = np.stack([offsety.flatten(), offsetx.flatten()], axis=1) 46 # offset_index: [[0 0], [0 1], [0 2], [1 0], ..., [2 2]] 47 48 kernel = kernel[::-1, ::-1] 49 50 for simg, idx in zip(stack_img, offset_index): 51 yidx, xidx = idx 52 simg[yidx:yidx + h, xidx:xidx + w] = img[:, :] # stack_imgの各チャネルにずらしながら原画像を格納 53 54 stack_img = stack_img.transpose(1, 2, 0) # matmulのために軸を入れ替える 55 kernel = kernel.flatten() 56 57 filter_img = np.matmul(stack_img, kernel) 58 59 return filter_img[1:-1, 1:-1] 60 61laplacian_img=stack_filtering(img, laplacian_kernel) 62plt.figure(figsize=(8,8)) 63plt.imshow(laplacian_img,cmap='gray') 64 65 66 67
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
jupyter notebook
python3.7
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/09 04:41