나는이 같은 일을 할 :ruby-vips에 maxfilter (주어진 반지름으로)를 어떻게 구현합니까?
http://reference.wolfram.com/language/ref/MaxFilter.html
내 이미지가 하나 개의 채널을 가지고 말할 수 있습니다 (그레이 스케일)입니다.
나는이 같은 일을 할 :ruby-vips에 maxfilter (주어진 반지름으로)를 어떻게 구현합니까?
http://reference.wolfram.com/language/ref/MaxFilter.html
내 이미지가 하나 개의 채널을 가지고 말할 수 있습니다 (그레이 스케일)입니다.
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
, 당신은 순위 필터와 함께이 작업을 수행 할 수 있습니다
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
w
및 h
는 너비 높이와 창 높이.
result = image.rank(w, 1, w - 1).rank(1, h, h - 1)
큰 반경 훨씬 빠를 것이다 : 당신은이 같이 쓸 수 있도록 물론
는, 최대/최소는 분리 할 수 있습니다.
물론 창 모양이 중요합니다. 이것은 흥미로운 방법이지만. 어쩌면 3x5와 5x3 ans의 두 개의 겹치는 사각형이 어떻게 든 결과를 결합하므로 반경 5의 원을 표현할 수 있습니다. 큰 반지름에 대해서는 잘 모르겠지만 내 방법보다 빠를 수 있습니다. – Nakilon
그건 영리한 생각입니다. 너는 얼마나 큰 일을해야 하는가? – user894763