0

我想做这样的事情:

在此处输入图像描述

http://reference.wolfram.com/language/ref/MaxFilter.html

假设我的图像有一个通道(灰度)。

4

2 回答 2

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
于 2017-11-25T11:54:23.693 回答
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

wherewh是窗口的宽度和高度。

当然,max/min 是可分离的,所以你也可以这样写:

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

对于大半径,这会快得多。

于 2017-11-25T15:19:01.010 回答