在大多数情况下可尝试使图像模糊

时间:2018-08-10 23:24:43

标签: ruby algorithm multidimensional-array

我正在尝试围绕多维数组中的现有对象创建对象。它似乎可行,但会产生以下说明的问题。

// neither of these seem to have an effect on touch/pointer events
button.disabled = true;
button.setAttribute('disabled', 'disabled');

此代码在大多数情况下都有效,如果在最后一个数组的最后一个索引上添加一个,则会引发错误;如果在其他数组的最后一个索引上放置1,则还会添加一个额外的1。

class Image


  def initialize(pixle)
    @pixle = pixle
  end

  def output_image
    @pixle.each do |row|
      puts row.join("")
    end
  end

  def find_ones
    ones = []
    @pixle.each_with_index do |row, i|
      row.each_with_index do |val, j|
        if val == 1
          ones << [i, j] 
        end
      end
    end 


     ones.each do |i, j|
       @pixle[i][j - 1] = 1 unless j == 0
       @pixle[i][j + 1] = 1 unless j == -1
       @pixle[i - 1][j] = 1 unless i == 0
       @pixle[i + 1][j] = 1 unless i == -1
     end
     output_image   
  end

end

image = Image.new([
  [1, 0, 0, 0],
  [0, 0, 0, 1], #this one adds extra one outside array
  [0, 0, 0, 0], 
  [0, 0, 0, 1] #if last index is 0 it works
])

image.find_ones

1 个答案:

答案 0 :(得分:1)

我认为问题出在这里:

   @pixle[i][j + 1] = 1 unless j == -1
   @pixle[i + 1][j] = 1 unless i == -1

i是行,j是找到一个的列。 必须针对矩阵的行数和列数测试ij,以避免在边界上添加额外的点。 如果更改为

   @pixle[i][j + 1] = 1 unless j == 3
   @pixle[i + 1][j] = 1 unless i == 3

它按预期工作。 更笼统地说,您应该选择矩阵的大小并在您的陈述中使用它,例如

@rows = pixle.size
@cols = pixle[0].size

因此,由于我们需要考虑索引,因此它可能变为:

@pixle[i][j + 1] = 1 unless j == @cols -1
@pixle[i + 1][j] = 1 unless i == @rows - 1