Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中手动锐化图像而不使用卷积运算_Java_Image Processing - Fatal编程技术网

在Java中手动锐化图像而不使用卷积运算

在Java中手动锐化图像而不使用卷积运算,java,image-processing,Java,Image Processing,我试图了解如何手动处理图像。这是一个学校项目,所以我不能使用Convalveop。我正在尝试手动执行它的功能 据我所知,锐化内核如下: -1 -1 -1 -1 9 -1 -1 -1 -1 这将意味着新像素的值将是(9*像素-相邻像素之和)/9。如果我错了,请纠正我。然而,我对这种方法有问题。我想这是因为我获取像素值的方式 我尝试过改变使用的“内核”。但我要么在原始图像上获得一堆像素,要么获得一个红色像素 我显然做错了什么。可能是我不应该使用.getRGB,或者我不完全理解这种类型

我试图了解如何手动处理图像。这是一个学校项目,所以我不能使用Convalveop。我正在尝试手动执行它的功能

据我所知,锐化内核如下:

-1 -1 -1  
-1  9 -1  
-1 -1 -1  
这将意味着新像素的值将是(9*像素-相邻像素之和)/9。如果我错了,请纠正我。然而,我对这种方法有问题。我想这是因为我获取像素值的方式

我尝试过改变使用的“内核”。但我要么在原始图像上获得一堆像素,要么获得一个红色像素

我显然做错了什么。可能是我不应该使用.getRGB,或者我不完全理解这种类型的图像处理是如何工作的

更新:

谢谢你的指点,斯蒂芬。按照你的建议,我创建了一个三维数组。我使用三维来跟踪rgb值


谢谢你指出那个错误

不应直接乘以RGB值。检查以下答案:

您可以将图像分解为3个阵列(r、g、b),进行卷积,然后从单个通道构建3通道图像

锐化内核添加了边缘过滤器和标识过滤器:

身份是:

[ 0,0,0;
  0,1,0;
  0,0,0];
边缘过滤器是:

[ -1,-1,-1;
  -1, 8,-1;
  -1,-1,-1];

如果要缩放锐化的强度,则可以通过除以某个值来缩放边缘过滤器。但只有边缘过滤器。不是身份。因此,您的假设“(9*像素-相邻像素之和)/9”是不正确的。它将是“(1*像素+(8*像素+相邻像素之和)/某个值)”。有些值可以是9,但也可以是任何其他值。

谢谢您的回复。我会仔细看看你提供的答案。我希望它能澄清我的问题/困惑。你不能在适当的地方这样做!不能从b读取值并将其写入b。想想看。这是行不通的。此外,除18之外的值仅适用于边缘内核。-><代码>)/18)和负值缺失:应该是
8*b[…]-b[…]-b[…]--b[…]
@Steffen Ok,因此b[i][j][x]的值应该是(b[i][j][x]+(8*b[i][j][x]-邻域)/一些_值@Steffen通过此修改,一些像素关闭(将在更新后)。至于b,我真的不明白你的意思。我使用“b”来跟踪.getRGB和红、绿、蓝的值。一旦我对collors进行了修改,我就把它们写到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]-邻居)/value