2017-11-25 8 views

답변

0

PI * R * R 컨볼 루션을 사용하여 수행 한 작업은 다음과 같습니다. 당신이 사각형 창을 신경 쓰지 않는 경우

R = 2 
D = R + R + 1 
CIRCLE = Vips::Image.black(D, D).draw_circle(1, R, R, R, fill: true).to_a 

new_image = image 
D.times do |i| 
    D.times do |j| 
    next unless CIRCLE[i][j] == [1] 
    t = image.conv Vips::Image.new_from_array Array.new(D){ [0]*D }.tap{ |t| t[i][j] = 1 } 
    new_image = (new_image > t).ifthenelse(new_image, t) 
    end 
end 

return new_image 
0

, 당신은 순위 필터와 함께이 작업을 수행 할 수 있습니다

result = image.rank w, h, w * h - 1 

http://jcupitt.github.io/libvips/API/current/libvips-morphology.html#vips-rank

http://www.rubydoc.info/gems/ruby-vips/Vips/Image#rank-instance_method

wh는 너비 높이와 창 높이.

result = image.rank(w, 1, w - 1).rank(1, h, h - 1) 

큰 반경 훨씬 빠를 것이다 : 당신은이 같이 쓸 수 있도록 물론

는, 최대/최소는 분리 할 수 ​​있습니다.

+0

물론 창 모양이 중요합니다. 이것은 흥미로운 방법이지만. 어쩌면 3x5와 5x3 ans의 두 개의 겹치는 사각형이 어떻게 든 결과를 결합하므로 반경 5의 원을 표현할 수 있습니다. 큰 반지름에 대해서는 잘 모르겠지만 내 방법보다 빠를 수 있습니다. – Nakilon

+0

그건 영리한 생각입니다. 너는 얼마나 큰 일을해야 하는가? – user894763