質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2143閲覧

python上の画像のケプストラムの出力について

satou_12

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/10/28 19:14

前提・実現したいこと

ブレ画像の点拡がり関数をpythonで求めたい。
ケプストラムは画像の対数振幅スペクトルを逆フーリエ変換したものである。という所までは理解した。
画像→2次元フーリエ変換→log→逆2次元フーリエ変換→ケプストラム出力 の順番だと認識している。

発生している問題・エラーメッセージ

出力されるケプストラムの画像は真っ暗である

イメージ説明

該当のソースコード

rekka_imgは自分で作成した劣化した画像

python

1kepusutoramu = np.fft.fft2(rekka_img) 2kepusutoramu = np.fft.fftshift(kepusutoramu) 3kepusutoramu = np.log(np.abs(kepusutoramu)) +1 4kepusutoramu = np.fft.ifftshift(kepusutoramu) 5kepusutoramu = np.fft.ifft2(kepusutoramu).real 6print(kepusutoramu) 7plt.subplot(141),plt.imshow(rekka_img, cmap = 'gray') 8plt.title('Input image'), plt.xticks([]), plt.yticks([]) 9plt.subplot(142),plt.imshow(kepusutoramu, cmap = 'gray') 10plt.title('Input image'), plt.xticks([]), plt.yticks([]) 11cv2.imwrite('/content/drive/My Drive/ケプストラム.jpg', kepusutoramu) 12plt.show()

質問

そもそも手順や認識が合っているのか分からず手詰まりの状態であり、どこが間違っているか分からない状態なので指摘して頂ければ幸いです。
logの底の値は何なのでしょうか

補足情報(FW/ツールのバージョンなど)

もしかしたら劣化画像を作成した段階で間違えている可能性があるので、全プログラムを以下に出します。

#import from google.colab import drive drive.mount('/content/drive') import sys import numpy as np from matplotlib import pyplot as plt from PIL import Image from scipy import signal import cv2 import base64 #PSF作成 height = 512 width = 512 blur = np.zeros((height, width), np.uint8) blur = cv2.line(blur,(240,240),(240,262),(255,255, 255),1) plt.subplot(121),plt.imshow(blur),plt.title('Averaging') plt.xticks([]), plt.yticks([]) plt.show() print(blur.shape) cv2.imwrite('/content/drive/My Drive/blur.jpg', blur) blur = cv2.imread('/content/drive/My Drive/blur.jpg',cv2.IMREAD_GRAYSCALE) plt.subplot(122),plt.imshow(blur),plt.title('A2veraging') plt.xticks([]), plt.yticks([]) print(blur.shape) #PSFをfft f = np.fft.fft2(blur)#blurは表示するために使う blur_fshift = np.fft.fftshift(f) magnitude_spectrum1 = 20*np.log(np.abs(blur_fshift)) print(magnitude_spectrum1) blur_fshift = np.fft.fftshift(blur_fshift) plt.subplot(121),plt.imshow(blur, cmap = 'gray') plt.title('Input Image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(magnitude_spectrum1, cmap = 'gray') plt.title('blur Spectrum'), plt.xticks([]), plt.yticks([]) plt.show() print(magnitude_spectrum1) #lenaのfft imput_img = cv2.imread('/content/drive/My Drive/lena.jpg',cv2.IMREAD_GRAYSCALE) print(imput_img.shape) imput_fshift = np.fft.fft2(imput_img)#img imput_fshift = np.fft.fftshift(imput_fshift) magnitude_spectrum2 = 20*np.log(np.abs(imput_fshift)) + 1 print(magnitude_spectrum2) imput_fshift = np.fft.ifftshift(imput_fshift) plt.subplot(121),plt.imshow(imput_img, cmap = 'gray') plt.title('Input image'), plt.xticks([]), plt.yticks([]) plt.subplot(122),plt.imshow(magnitude_spectrum2, cmap = 'gray') plt.title('imput spectrum'), plt.xticks([]), plt.yticks([]) plt.show() cv2.imwrite('/content/drive/My Drive/fftshift.jpg',magnitude_spectrum2 ) # 劣化画像のifft rekka_img = np.fft.ifft2(imput_fshift*blur_fshift).real rekka_img = np.fft.ifftshift(rekka_img) # 可視化 plt.subplot(131),plt.imshow(imput_img, cmap = 'gray') plt.title('Input image'), plt.xticks([]), plt.yticks([]) plt.subplot(132),plt.imshow(magnitude_spectrum2, cmap = 'gray') plt.title('imput spectrum'), plt.xticks([]), plt.yticks([]) plt.subplot(133),plt.imshow(rekka_img, cmap = 'gray') plt.title('rekka iamge'), plt.xticks([]), plt.yticks([]) plt.show() #print(i_f_xy) cv2.imwrite('/content/drive/My Drive/劣化lena.jpg', rekka_img) print(rekka_img.shape) #劣化画像のケプストラム作成 kepusutoramu = np.fft.fft2(rekka_img) kepusutoramu = np.fft.fftshift(kepusutoramu) kepusutoramu = np.log(np.abs(kepusutoramu)) +1 kepusutoramu = np.fft.ifftshift(kepusutoramu) kepusutoramu = np.fft.ifft2(kepusutoramu).real print(kepusutoramu) plt.subplot(141),plt.imshow(rekka_img, cmap = 'gray') plt.title('Input image'), plt.xticks([]), plt.yticks([]) plt.subplot(142),plt.imshow(kepusutoramu, cmap = 'gray') plt.title('Input image'), plt.xticks([]), plt.yticks([]) cv2.imwrite('/content/drive/My Drive/ケプストラム.jpg',kepusutoramu ) plt.show()

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

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

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

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

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

guest

回答1

0

一番明るいデータで表示される明るさが決まるので、暗いところのわずかな違いが分かるようにしないと、見えません

python

1# import 2#from google.colab import drive 3#drive.mount('/content/drive') 4import sys 5import numpy as np 6from matplotlib import pyplot as plt 7from PIL import Image 8from scipy import signal 9import cv2 10import base64 11 12# PSF作成 13height = 512 14width = 512 15blur = np.zeros((height, width), np.uint8) 16blur = cv2.line(blur,(240,240),(262,262),(255,255, 255),1) 17#blur = cv2.circle(blur, (256, 256), 20, (255, 255, 255), -1) 18print(blur.shape) 19 20# PSFをfft 21f = np.fft.fft2(np.fft.fftshift(blur)) 22blur_fshift = np.fft.fftshift(f) 23magnitude_spectrum1 = np.log(np.abs(blur_fshift)) 24plt.imshow(blur, cmap = 'gray') 25plt.title('blur PSF'), plt.xticks([]), plt.yticks([]) 26plt.show() 27 28plt.imshow(magnitude_spectrum1, cmap = 'gray') 29plt.title('blur magnitude_spectrum'), plt.xticks([]), plt.yticks([]) 30plt.show() 31 32# lenaのfft 33#imput_img = cv2.imread('/content/drive/My Drive/lena.jpg',cv2.IMREAD_GRAYSCALE) 34imput_img = cv2.imread('lena_color.png',cv2.IMREAD_GRAYSCALE) 35print(imput_img.shape) 36imput_fshift = np.fft.fft2(imput_img) 37imput_fshift = np.fft.fftshift(imput_fshift) 38magnitude_spectrum2 = np.log(np.abs(imput_fshift)) 39plt.imshow(imput_img, cmap = 'gray') 40plt.title('Input image'), plt.xticks([]), plt.yticks([]) 41plt.show() 42 43plt.imshow(magnitude_spectrum2, cmap = 'gray') 44plt.title('Input magnitude_spectrum'), plt.xticks([]), plt.yticks([]) 45plt.show() 46#cv2.imwrite('/content/drive/My Drive/fftshift.jpg',magnitude_spectrum2 ) 47 48# 劣化画像のifft 49imput_fshift = np.fft.ifftshift(imput_fshift) 50blur_fshift = np.fft.fftshift(blur_fshift) 51rekka_f = np.fft.fftshift(imput_fshift*blur_fshift) 52magnitude_spectrum12 = np.log(np.abs(rekka_f)) 53rekka_img = np.fft.ifft2(imput_fshift*blur_fshift).real 54plt.imshow(magnitude_spectrum12, cmap = 'gray') 55plt.title('rekka magnitude_spectrum'), plt.xticks([]), plt.yticks([]) 56plt.show() 57 58plt.imshow(rekka_img, cmap = 'gray') 59plt.title('rekka iamge'), plt.xticks([]), plt.yticks([]) 60plt.show() 61print(rekka_img.shape) 62rekka_img_i = (rekka_img / np.max(rekka_img) * 255).astype(np.uint8) 63#cv2.imwrite('/content/drive/My Drive/劣化lena.jpg', rekka_img_i) 64#cv2.imwrite('rekka_lena.png', rekka_img_i) 65print(rekka_img_i.shape) 66 67# 劣化画像のケプストラム作成 68kepusutoramu = np.fft.fft2(rekka_img) 69kepusutoramu = np.log(np.abs(kepusutoramu)) 70kepusutoramu = np.fft.ifft2(kepusutoramu).real 71kepusutoramu = np.fft.ifftshift(kepusutoramu) 72#cv2.imwrite('/content/drive/My Drive/ケプストラム.jpg',kepusutoramu ) 73 74kepusutoramu_c = np.clip((kepusutoramu-np.min(kepusutoramu)), 0, np.min(kepusutoramu)*-2.0) 75plt.imshow((kepusutoramu_c), cmap = 'gray') 76plt.title('rekka Cepstrum'), plt.xticks([]), plt.yticks([]) 77plt.show()

なお、こちらの環境で動かすために変えてるところがあるので、そこは直してください

投稿2020/12/23 04:11

編集2020/12/23 04:17
jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問