【发布时间】:2023-03-21 13:25:01
【问题描述】:
我正在尝试了解如何手动处理图像。这是一个学校项目,所以我将无法使用 ConvolveOp。我正在尝试手动执行它的功能。
根据我的阅读,锐化内核是这样的:
-1 -1 -1
-1 9 -1
-1 -1 -1
这意味着新像素的值将是 (9*pixel - sum_of_neighbors)/9。如果我错了,请纠正我。但是我在使用这种方法时遇到了问题。我认为是因为我获取像素值的方式。
我已尝试更改使用的“内核”。但我要么在原始图像上获得一堆像素或红色像素。
我显然做错了什么。可能是我不应该使用 .getRGB,或者我不完全理解这种类型的图像处理是如何工作的。
更新:
感谢Steffen 的指点。按照您的建议,我创建了一个 3 维数组。我使用第 3 维来跟踪 rgb 值
感谢您指出这个错误。
【问题讨论】:
-
您不能就地执行此操作!您不能从 b 读取值并将它们写入 b。想想看。这是行不通的。此外,除以 18 应该只针对边缘内核。 ->
)/18);并且缺少负值:应该是8*b[...] - b[..] -b[...]。 -
@Steffen 好的,所以 b[i][j][x] 的值应该是 (b[i][j][x] + (8*b[i][j] [x] - 邻居)/some_value)
-
@Steffen 通过此修改,一些像素已关闭(将发布更新)。至于b,我不太明白你的意思。我正在使用“b”来跟踪 .getRGB 和红色、绿色、蓝色的值。对颜色进行修改后,我将它们写入 a. “a”是主像素阵列。
-
修改 b[1][1][2] 然后继续修改 b[1][2][2]。要修改此值,您需要访问 b[1][2-1][2],这基本上是您之前修改的值。这不应该发生。您需要原始颜色值。
-
明白。基本上我需要一些中间变量才能不修改我的数组,例如: int red = b[1][1][2] + ( 8 * b[1][1][2] - neighbors)/value
标签: java image-processing