나는 기본적인 2-D numpy 배열을 가지고 있으며 좀 더 거친 해상도로 "다운 샘플링"하고 싶습니다. 쉽게 이것을 할 수있는 간단한 numpy 또는 scipy 모듈이 있습니까? 이 배열은 Basemap 모듈을 통해 지리적으로 표시됩니다.파이썬에서의 다운 샘플 배열
예제 :
나는 기본적인 2-D numpy 배열을 가지고 있으며 좀 더 거친 해상도로 "다운 샘플링"하고 싶습니다. 쉽게 이것을 할 수있는 간단한 numpy 또는 scipy 모듈이 있습니까? 이 배열은 Basemap 모듈을 통해 지리적으로 표시됩니다.파이썬에서의 다운 샘플 배열
예제 :
imresize과 같은 ndimage.interpolation.zoom 보면 그들은 당신이
내가 여기 imresize 전에 시도했지만하지 않은 내가 ndimage.interpolation.zoom
a = np.array(64).reshape(8,8)
a = ndimage.interpolation.zoom(a,.5) #decimate resolution
를 사용한 방법입니다 원하는 것을 할
a는 그 안에 보간 값이있는 4x4 행렬입니다.
T 그 사람이 당신이 찾고있는 사람이 아닐지도 모르겠다.
libsamplerate 용 Python wrapper 인 scikits.samplerate
(docs)을 설치해보십시오. 고품질의 리샘플링 알고리즘을 제공합니다. 그러나 내가 알 수있는 한, 1D에서만 작동합니다. 한 축을 따라 2D 신호를 리샘플링하고 다른 축을 따라 2D 신호를 리샘플링 할 수는 있지만 고품질 리샘플링의 이점을 방해 할 수 있다고 생각합니다.
예,이 상황에서는 작동하지 않지만 입력 해 주셔서 감사합니다. 나는 공간적으로 집합 할 수있는 무언가가 필요하다. – wuffwuff
다운 샘플링 할 때 보간법이 잘못되었습니다. 항상 집계 된 접근 방식을 사용하십시오.
"요인"을 사용하여 해상도를 줄이는 방법으로 블록 방법을 사용합니다.
import numpy as np
from scipy import ndimage
def block_mean(ar, fact):
assert isinstance(fact, int), type(fact)
sx, sy = ar.shape
X, Y = np.ogrid[0:sx, 0:sy]
regions = sy/fact * (X/fact) + Y/fact
res = ndimage.mean(ar, labels=regions, index=np.arange(regions.max() + 1))
res.shape = (sx/fact, sy/fact)
return res
예 5 (5 × 블록)의 계수를 사용하여 (100, 200) 형상으로 배열 A (20, 40) 배열 결과 결과 :
ar = np.random.rand(20000).reshape((100, 200))
block_mean(ar, 5).shape # (20, 40)
고마워요, 마이크. 나는 당신의 해결책이 내가 찾는 것을 더 많이 생각한다고 생각합니다. 코드를 적용 할 때 배열 크기가 일치하지 않아 오류가 발생합니다 : 'file "diffplot.py", 38 행, block_mean res.shape = (sx/fact, sy/fact) ValueError : 전체 크기 새로운 배열은 변경되지 않아야합니다. ' – wuffwuff
위의 문제는 인자가 원래 배열 모양으로 똑같이 나눌 필요가 있기 때문입니다. 그러나이 함수는 여전히 부적절한 결과를 제공합니다. 흥미 롭 군. 내가 찾고있는 것처럼 '리 샘플링'하지 않는 것 같습니다. 대신 diff 배열을 가져 와서베이스 맵 창에 여러 번 그려 넣었습니다. 나는 일종의 응집체 또는 용해 기술이 필요할 것이라고 생각합니다. 지금까지 의견을 보내 주셔서 감사합니다. – wuffwuff
안녕하세요 마이크, 왜 보간법이 왜 다운 샘플링에 나쁜 방법인지 설명해 주시겠습니까? 보간법이 좋지 않다면 이미지 크기가 원하는 블록 크기로 나눌 수없는 경우를 다루는 훌륭한 방법이 있을까요? –
scikit-image
작업 버전을 시행했다
http://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.block_reduce
: 내가 제대로 이해한다면 여기downsampling
의,하지만 그들은 그것이 DSP의 측면에서 다운 샘플링되지 않는 것이
downsampling
를 호출 부끄러워
하지만 매우 잘 작동하며 이미지에서 np.nan
을 처리 할 수있는 것은 파이썬에서 찾은 유일한 downsampler
입니다. 나는 이걸로 거대한 이미지를 아주 빨리 다운 샘플링했다.
OP는 단지 courser 해상도를 원하기 때문에 각 차원에서 픽셀 수를 절반으로 줄이는 방법을 공유 할 것이라고 생각했습니다. 나는 2x2 블록의 평균을 취한다. `findiff = scipy.misc.imresize (DIFF, 30 = "선형"보정시, 모드 = 없음 : 이것은 다음 2
from scipy.ndimage import covolve
array_downsampled = convolve(array, np.array([[0.25,0.25],[0.25,0.25]]))[:array.shape[0]:2,:array.shape[1]:2]
의 요인에 의해 감소시키기 위해 여러 번 적용될 수있다하면 코드이며) colbar = m.colorbar frefcobj = m.pcolormesh (x, y, findiff, 음영 = '평면', vmin = -15, vmax = 15, cmap = cmap, size = "4 %", pad = "5 %", extend = 'both', ticks = intervals)' diff는 699x699 배열입니다. 작업을 수행하지 않는 것 같습니다. – wuffwuff
이전에 imresize를 시도하지 않았지만 확대/축소를 사용하여 스 니펫을 추가했습니다. 그것은 당신이 찾고있는 것이 아닙니까?나는 그것을 포함하지 않는 것으로 보이는 이전 버전의 scipy를 가지고 있기 때문에 현재 imresize를 테스트 할 수 없습니다. – Hammer
흥미 롭습니다. 내가 찾고있는 것처럼 '리 샘플링'하지 않는 것 같습니다. 대신 diff 배열을 가져 와서베이스 맵 창에 여러 번 그려 넣었습니다. 나는 일종의 응집체 또는 용해 기술이 필요할 것이라고 생각합니다. 지금까지 의견을 보내 주셔서 감사합니다. – wuffwuff