class Despeck::WatermarkMask

Creates B&W mask for the watermark

Attributes

image[R]
mask[R]
no_watermark[R]
sensitivity[R]
watermark[R]

Public Class Methods

new(image, sensitivity: 20) click to toggle source
# File lib/despeck/watermark_mask.rb, line 12
def initialize(image, sensitivity: 20)
  @image       = image
  @sensitivity = sensitivity
end

Public Instance Methods

find_masks!() click to toggle source
# File lib/despeck/watermark_mask.rb, line 17
def find_masks!
  @mask = adjusted_chroma_mask(image)

  @watermark    = (image + @mask.invert)
  @no_watermark = (image + @mask)

  [watermark, no_watermark, mask]
end

Private Instance Methods

adjusted_chroma_mask(image) click to toggle source
# File lib/despeck/watermark_mask.rb, line 28
def adjusted_chroma_mask(image)
  smaller_image = image.resize(0.2)
  closing(chroma_mask(smaller_image))
    .dilate(dilate_mask)
    .resize(5)
end
chroma_mask(img) click to toggle source
# File lib/despeck/watermark_mask.rb, line 35
def chroma_mask(img)
  img = img.colourspace 'lch'
  (img[1] > sensitivity)
end
closing(img) click to toggle source
# File lib/despeck/watermark_mask.rb, line 45
def closing(img)
  img.dilate(dilate_mask).erode(dilate_mask)
end
dilate_mask() click to toggle source
# File lib/despeck/watermark_mask.rb, line 40
def dilate_mask
  @dilate_mask ||=
    Vips::Image.new_from_array Array.new(3, Array.new(3, 255))
end