2016-08-09 2 views
5

this의 반대쪽을 시도하고 있습니다. (연속적인) 강도의 2D 이미지가 주어지면 불규칙하게 간격을 둔 축적 점 세트, 즉 2D 맵을 불규칙하게 덮는 점의 세트를 생성합니다. 고강도 영역에서 서로 가깝게 위치합니다 (, 겹치지 않음!).불규칙한 간격의 누적 점 계산 방법

첫 번째 시도는 "가중치가있는"k- 수단이었습니다. 가중치 k 평균의 작동 구현을 찾지 못했기 때문에, 가중치를 소개하는 방법은 높은 강도의 점을 반복하는 것으로 구성됩니다. 여기 내 코드는 다음과 같습니다.

import numpy as np 
from sklearn.cluster import KMeans 

def accumulation_points_finder(x, y, data, n_points, method, cut_value): 
    #computing the rms 
    rms = estimate_rms(data) 
    #structuring the data 
    X,Y = np.meshgrid(x, y, sparse=False) 
    if cut_value > 0.: 
     mask = data > cut_value 
     #applying the mask 
     X = X[mask]; Y = Y[mask]; data = data[mask] 
     _data = np.array([X, Y, data]) 
    else: 
     X = X.ravel(); Y = Y.ravel(); data = data.ravel() 
     _data = np.array([X, Y, data]) 

    if method=='weighted_kmeans': 
     res = [] 
     for i in range(len(data)): 
      w = int(ceil(data[i]/rms)) 
      res.extend([[X[i],Y[i]]]*w) 
     res = np.asarray(res) 
     #kmeans object instantiation 
     kmeans = KMeans(init='k-means++', n_clusters=n_points, n_init=25, n_jobs=2) 
     #performing kmeans clustering 
     kmeans.fit(res) 
     #returning just (x,y) positions 
     return kmeans.cluster_centers_ 

다음은 두 가지 결과입니다. 1) 모든 데이터 픽셀을 사용합니다. 2) 일부 임계 값 (RMS) 이상의 픽셀 만 사용합니다.

With threshold

당신이 포인트를 볼 수있는

Without threshold

높은 강도의 영역에 집중보다 더 정기적으로 이격 될 것으로 보인다.

질문은 이러한 누적 포인트를 계산할 때 (가능한 경우 결정적) 더 나은 방법이있는 경우입니다.

답변

1

쿼트 트리 (https://en.wikipedia.org/wiki/Quadtree)를 사용하여 데이터를 균등 한 분산으로 분할하거나 정의 된 임계 값을 사용하여 농도 값을 사용할 수도 있습니다. 그런 다음 단위당 한 점 (중심 값)을 유지하십시오. 급격하게 변화하는 값을 가진 영역에는 배경 구획이 더 적고, 배경 영역에서는 더 적은 수의 구획이있을 것입니다.

+0

감사합니다. 좋은 아이디어입니다. 나는이 방법을 연구하고 그것을 나의 요구 사항에 맞추려고 노력할 것이다. – mavillan