2013-09-02 42 views
5

Có thể lấy "phần tử hiện tại" bên trong chức năng lọc của scipy.ndimage.filters.generic_filter không?Lấy phần tử hiện tại trong scipy.ndimage.filters.generic_filter

Nếu, ví dụ, A[0] luôn chứa đựng các yếu tố hiện tại (mà dường như không phải là trường hợp) giống như sau có thể tìm cực đại địa phương

def local_max_f(A) : 
    return A[0] == A.max() 

img = np.random.rand(100).reshape(10,10) 
ndimage.generic_filter(img, local_max_f, size=3) 

Trả lời

3

Yếu tố hiện nay nên được các yếu tố trong trung tâm của size (hoặc A[1] trong ví dụ của bạn), nhưng điều này không thể được dựa vào ở các cạnh của mảng đầu vào và phụ thuộc vào mode để xử lý đường viền mảng.

docs instead provide a neat example (điều chỉnh cho tình huống của bạn bên dưới) để xác định vị trí hiện tại trong bộ lọc sử dụng lớp để duy trì trạng thái giữa các lần lặp. Điều này luôn luôn lặp lại thông qua kích thước cuối cùng trước tiên; tất cả những gì bạn cần làm là thay thế đường dây result bằng bất kỳ chức năng lọc nào của bạn thực sự cần làm, trong trường hợp của bạn, điều này sẽ giống như result = self._array[self.coordinates] == buffer.max().

a = arange(12).reshape(3,4) 

class fnc_class: 
    def __init__(self, _array): 
     # store the shape: 
     self.shape = _array.shape 
     self._array = _array 
     # initialize the coordinates: 
     self.coordinates = [0] * len(self.shape) 

    def filter(self, buffer): 
     result = self._array[tuple(self.coordinates)] == buffer.max() 
     print self.coordinates 
     # calculate the next coordinates: 
     axes = range(len(self.shape)) 
     axes.reverse() 
     for jj in axes: 
      if self.coordinates[jj] < self.shape[jj] - 1: 
       self.coordinates[jj] += 1 
       break 
      else: 
       self.coordinates[jj] = 0 
     return result 

fnc = fnc_class(a) 
generic_filter(a, fnc.filter, footprint = [[1, 0], [0, 1]]) 
+0

Điều này không hoạt động .. ít nhất trong trường hợp 2D tôi đang sử dụng. Đã xảy ra sự cố với tra cứu 'self._array'. Tôi đang cố gắng tìm cách khắc phục nó .. – ajwood

Các vấn đề liên quan