이 주제에 대해 많이 논의되었지만 아직 답변되지 않은 문제가 있습니다. 내 문제는 자기 방법이 아니라 적용 가능성이 있습니다 : 내 이미지의 f (x, y)는 이 될 수있는 물리적 값을 나타내거나입니다. 중간 값을 나타내는 피크를 가려 낼 때, 역 FFT를 적용한 후에 복잡한 이미지를 얻습니다.주기적인 노이즈의 FFT 제거
이 이음새는 image! = ifft (fft (image)) 이미지가! = image 일 때 논리적입니다. 따라서 매우 복잡한 결과가 될 수 있습니까?
따라서 이미지 배열의 절대 값을 가져 와서 멋지게 정리 된 이미지를 얻을 수 있습니다. 하지만 이미지의 abs를 취함으로써 나는 음수 값을 잃어 버렸습니다!
내 코드가 복잡하고 어디는 필수로 분해 않도록 마스크하는 정확한 위치를 찾기 위해 여러 개의 이미지를 사용하여 내가 가진
def everything(fft,fftImage,sizeOfField,shapeOfFFT):
max_x = []
max_y = []
median = np.median(fft)
threshold = 500
#correctLocalMax() holds several subfunctions that look for the propper max_x and max_y. This works fine and returns 2 lists max_x,max_Y that contain the coordiantes of the max's
max_x,max_y = correctLocalMax(iStart = 0,iStop = 30, jStart =0 , jStop = shapeOfFFT[1],threshold=threshold, max_x = max_x, max_y = max_y)
for i in range(len(max_x)):
for k in range(sizeOfField):
for l in range(sizeOfField):
fftImage[max_x[i]+k][max_y[i]+l] = median
return(fftImage)
image, coverage, stdev = pickleOpener(dataDir,i)
field = getROI(image,area,i0,j0)
fftImage = np.fft.fft2(image)
fftImage = np.fft.fftshift(fftImage)
fft = np.fft.fft2(coverage)
fft = np.fft.fftshift(fft)
fftMod = everything(fft, fftImage, sizeOfField, shapeOfFFT)
imageBack = np.fft.ifft2(fftMod)
imageBack = np.abs(imageBack)
field = getROI(imageBack,area,i0,j0)
이미지와 같은 모양을 처리 한 후 얻을 : 스트라이프 패턴은 내가
을 제거 할 것들 다음은 FFT에 적용되는 마스크입니다
스트라이프 패턴이 대부분 제거되었지만 이제는 이미지가 순전히 긍정적입니다.
의견에 문제의 적절한 해결책을 찾을 수 있습니다!
이것은 정말 좋은 질문입니다. 그리고 좋은 대답이 있습니다. 이 블로그 게시물은 무슨 일이 일어나고 있는지, 매우 일반적인 용어로 해결할 수있는 방법을 설명합니다. http://blogs.mathworks.com/steve/2010/07/16/complex-surprises-from-fft/하지만 1D이며 해결되지 않았습니다. 당신이 풀려고하는 문제. 원본 이미지 데이터를 어딘가에 게시 할 수 있습니까 (줄무늬 포함)? IFFT에서 실제 출력을 얻으려면 마스크를 조정하는 방법을 보여줄 수 있습니다. –
데이터를 묻는 것에 신경 쓰지 말고, 정확한 'correctLocalMax'가 어떻게 복잡한 함수인지에 대한 글을 다시 읽습니다. 기본적인 문제는 스펙트럼을 0으로 마스크 할 때 스펙트럼의 공액 대칭을 유지해야한다는 것입니다. –
나 혼란 스럽다 : 스펙트럼 (fft2'의 출력, fftMod')은 이미 conjugate-symmetric이어야한다 : 그것의 피크 (여기서는 줄무늬에 해당)는 왼쪽에서 오른쪽으로 대칭이어야하고, 대칭적인 위 - 아래. 하지만 당신의'correctLocalMax'는 conjugate-symmetric이 아닌 마스크를 반환하는 것 같습니다. 이 문제를 해결하면 코드가 작동합니다. –