【发布时间】:2015-03-26 01:30:40
【问题描述】:
我正在做一个任务,需要计算位置 (x,y) 周围像素的 NxN 平均值。
当我传入一个大小变量时,我正在尝试创建一个通用函数来执行此操作。
我只允许大小或 NxN 矩阵为 3x3、5x5 或 7x7。
我试图做的是为每个像素创建一个通用循环,检查它是否是极端情况,然后是侧面情况,如果不是,则为默认情况。
例子
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
如果我想做一个 5x5 的平均值,它需要这 25 个像素值来计算。但是如果我的 (x,y) 位置在 (1,2) 它将超出范围。
我试图找出每个场景的案例,但我发现解决起来很复杂,因为 5x5 出现了一些案例,而 3x3 不存在。 如果我的 (x,y) 在 (1,1) 它不属于我的角落案例,但它确实属于我的两个侧面案例(顶部和左侧)。
我想知道将所有内容都放入 try catch 语句中是否安全/值得,如果数组位置超出范围,没什么大不了的。
我根本不需要做任何案例,我可以检查 9 (3x3)、25 (5x5) 或 49 (7x7) 单独的数组位置是否超出范围。
前 3x3
try{
imageBuffer.getRBG(x - 1, y -1);
}catch{...}
try{
imageBuffer.getRBG(x, y -1);
}catch{...}
try{
imageBuffer.getRBG(x + 1, y -1);
}catch{...}
这看起来真的很糟糕,但我想找出这些情况来找出任何平均值的通用函数。
如果像素 (x,y) 周围的 NxN 平均值超出范围,它将计算范围内像素的平均值。如果它是 3x3 平均值并且它是第一个极端情况(左上角 (0,0)),我将计算我可以访问的 4 个像素。 所以
0 1 2
3 4 5
6 7 8
我会计算 4,5,7 和 8 的平均值
【问题讨论】:
-
如果我理解正确,您只是想检查给定像素的相邻 8 个单元格。如果正确,这种情况类似于在 Minesweeper 游戏中寻找邻近的地雷。我的一位老师建议这种an approach。我希望它也会在这里有所帮助:-)
-
出现拐角怎么办?计算其他像素的平均值?不认为它是结果图像的一部分?
-
因此您只需遍历单元格 +/- N/2 内的 X 和 Y 值。如果每个单元格都存在,则将其值添加到您的总数中,并将 1 添加到您的计数中。如果没有,那么什么也不做。将总数除以最后的计数。究竟是什么问题?您不应该真正使用异常来处理具有边和角的正方形的“正常”情况。
-
是的,我现在只是有点想,我只是把事情复杂化了。
标签: java indexoutofboundsexception