前提
pythonで画像(グレースケール)の空間周波数分解における、ローパスフィルタ用のマスク画像を作成しています。
for分で1ピクセルずつ処理を行っていますが、そこでIndex Errorがでて困っています。
実現したいこと
中央一定領域が1で他(周辺)が0の行列の作成
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\file.py", line 28, in <module> maskc[x,y] = 0 IndexError: index 250 is out of bounds for axis 1 with size 250
該当のソースコード
python
1rows, cols = img.shape 2crow, ccol = int(rows / 2), int(cols / 2) 3mask = 5 4maskc = np.zeros((rows, cols)) 5for x in range(cols): 6 for y in range(rows): 7 if abs(x - ccol) < mask and abs(y - crow) < mask: 8 maskc[x,y] = 1 9 else: 10 maskc[x,y] = 0 11lp_shift = f_shift * maskc
imgは画像で、f_shiftはフーリエ変換後の周波数空間上のスペクトルです。
わからない点
range関数は0スタートで、入力した整数の1つ前までを出す認識です。
cols=250なので0~249で繰り返してくれていると思うのですが、そうなるとx=250になる意味が分かりません。
(x=250がエラーの原因だと思っていますが、そこの間違いでしょうか?)
おそらく非常に初歩的なところだと思うのですが、考えすぎてわからなくなりました。
ご教授の程よろしくお願いいたします。
コードには問題ないように見えます。
どの行でエラーが発生したかわかるようにエラーは全文(Traceback)を記載ください。
またprint(rows, cols)してみて意図通りの値になっているかを質問本文に記載ください。
質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください
(ここに書くのではなく、質問を編集して追記する)
ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
解決はしましたがが、エラー全文追加しました。
今後気をつけます、お二方ご指摘ありがとうございました。
range関数の機能を確認するという方向に行くのがおかしいです。
「xが250になったということは、range(cols)のcolsの値が251以上に違いない」という方向に考えが自然に向かないといけません。
回答1件
あなたの回答
tips
プレビュー