🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

303閲覧

サンプルコードと自分のコードの差分が分からない(動作しないため)

kimtakuya_

総合スコア22

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/09 04:12

前提・実現したいこと

画像のフィルタリング処理を行いたいが、サンプルコードとの差分が分からない。
サンプルコードではうまく輪郭を検出できているが、自分のものでは、真っ黒になってしまう
ソースコードの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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ツール使って比較してね
https://winmerge.org/?lang=ja

投稿2019/11/09 04:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kimtakuya_

2019/11/09 04:41

diffcheckerという差分を探すものを使いましたが、コメント部分とspaceの有無しか違いが見つかりませんでした
guest

0

ベストアンサー

for文以下のインデント(字下げ)が異なっているようです。

pythonはインデントでブロックを現すので、インデントを変えると意味も変わります。

投稿2019/11/09 04:46

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kimtakuya_

2019/11/09 04:50

無事解決しました、初歩的なミスですが見つけられないものですね(焦)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問