2017-11-14 29 views
1

데이터 큐브 '큐브'가 있습니다. 각 2 차원 슬라이스를 가우스 커널로 컨버팅해야합니다.데이터 큐브의 가우시안 컨볼 루션

그러나 다음 코드를 사용하면 각 슬라이스에서 약한 픽셀을 희석하는 정규화 된 가우스 커널을 사용합니다.

'최대 (가우스)'라는 말로 각 픽셀을 가우시안으로 나누어 각 픽셀이 픽셀 강도에 비례하여 컨볼 루션되도록하는 방법이 있습니까?

import numpy as np 
from astropy.convolution import convolve, Gaussian2DKernel 

std = 2 

gauss_kernel = Gaussian2DKernel(std) 

for i in range(len(cube[:,0,0])): 
     cube[i,:,:] = convolve(cube[i,:,:], gauss_kernel/np.max(gauss_kernel)) 
+0

결과를 슬라이스로 나누면 거의 동일한 효과를 얻지 않겠습니까? – Evert

+0

나는 정말로 모른다. 여기서 내가 믿는 것은 각 요소 (또는 픽셀)에 대해 인접 요소를 가로 질러 확산되는 결과적인 가우시안이 정규화된다는 것입니다. 이 때문에 더 높은 값의 요소는 낮은 값의 픽셀과 다르게 영향을받습니다. 그러나 필요한 것은 요소가 원래 값을 유지하지만 가우스 형식으로 흐리게 확산되어 다른 요소에 전달된다는 것입니다. 컨볼 루션 후 슬라이스로 나누면 각 요소가 하나가 될 것입니다. – user8188120

+0

게시 한 솔루션은 이미 피크 정규화 가우시안과 컨벌루션하는 방법을 보여줍니다. 기본값은 적분 정규화 가우시안과 컨벌루션입니다. 그 밖에 무엇을 원하십니까? 큐브의 각 채널을 부드럽게 만드는 일반적인 사용 사례로 http://spectral-cube.readthedocs.io/en/latest/smoothing.html#spatial- smoothing을 사용하고자 할 수 있습니다. – keflavich

답변

1

이미 설명한 솔루션은 피크 정규화 가우시안과 컨버그하는 방법을 보여줍니다. 귀하의 의견에서 주변 데이터 포인트의 영향을받지 않는 "최고점"을 원하는 것처럼 들립니다. 엄밀히 말하면, 가능하지 않습니다. 회선이란 을 말합니다. 모든 픽셀이 확산됩니다.

그러나, 당신은 정규화 된 회선에 대해 이야기하고있을 수도 있는데, astropy는 이것을 구현합니다 (http://docs.astropy.org/en/stable/convolution/index.html 참조). 주변 픽셀이 NAN으로 설정되어 있으면 주변에있는 픽셀에 아무런 영향을 미치지 않습니다. 따라서 주변에 "빈"픽셀로 흐리게 처리하려는 픽셀이 몇 개 밖에없는 드문 드문 배열이있는 경우 "빈"픽셀을 NaN으로 설정하면됩니다. 이 예제를보십시오 : http://docs.astropy.org/en/stable/convolution/index.html#using-astropy-s-convolution-to-replace-bad-data

1

당신의 문제는 높은 수준의 커널과 회선과 관련이 있다고 믿습니다.

몇 가지 배열이 있다고 가정합니다. 당신이 conv(arr,kernel)을 할 경우, 다시 편곡을 받아야하므로

arr = np.ones((5,5)) 

가 그리고 당신은 또한이 경우 일부 2D 컨볼 루션 커널

kernel = [[0,0,0], 
      [0,1,0], 
      [0,0,0]] 

을 가지고, 그것은, 신원 커널입니다.

커널을 1D 상자 흐림 커널로 변경하면 어떻게 될까요? 이전 값은 1이며, 회선 후에는 1*arr[3,2] + 1*arr[3,3] + 1*arr[3,4] = 3 될 것입니다 -

kernel = [[0,1,0], 
      [0,1,0], 
      [0,1,0]] 

당신은 arr 다시 흐려 버전, 1.에서 요소 (3,3)을 고려 피크 즉 배열을 얻을 것으로 기대 안된다. 대신 경우, kernel 그 가운데 열 함께 0.33를 가지고, 각 요소의 1/3을 얻을 것이고, 값이 컨볼 루션 커널의 몇 가지 분류를 구분 1.

남아있을 것 -이다 것과있다 표준화되어 있지 않은 및 그 값은, 부 피크하고 1의 최대 값을 가질 것과, 그리고 (모든 값의 합) 1.

총 에너지의 합을 갖는 단위 에너지 된 것을 거리낌있다 이미지는 비정규 화되거나 단위 피크 커널로 바뀝니다. 단위 에너지 커널로 컨벌루션하면 이미지의 전체 에너지가 전후로 동일하게 유지됩니다.

당신의 코멘트를 해결하려면 다음을

을 각 픽셀은 픽셀 강도 컨 볼빙 된 (convolved) 상대가되도록 '최대 (가우스)'라고하여 가우시안 각 픽셀을 분할하는 방법이 있나요?

밝은 물건 (별)을 어두운 물건 (배경)보다 흐리게 만드는 것이 원하는 경우 자연히 발생합니다. 또는 더 구체적으로 높은 콘트라스트 콘트라스트가 낮은 것보다 흐리게 보입니다. 카메라를 상상해보십시오. DSLR이나 휴대 전화 또는 다른 어떤 것이 될 수 있습니다. 푸른 구름이없는 하늘에 초점이 맞지 않는다면 말할 수 있습니까? 별에 초점이 맞지 않으면 말할 수 있습니까?

회 돌이에서 픽셀의 값에 가중치를 부여하려면 데이터를 복제하고 각 픽셀을 적절한 가중치로 스케일하고 수정 된 데이터를 커널과 콘볼 루션해야합니다.

+0

정말 유익했습니다! 나는 당신이 옳다고 생각합니다. 그리고 어떤면에서 프로세스에 대한 지식이 부족하다는 것이 문제 였고 컨볼 루션이 실제로 잘 작동한다는 것입니다. – user8188120