2017-04-03 22 views
0

下面的代码是一个图像处理例程。 x和y表示组成图像的所有像素的坐标。基本信息如下:如果在Java中给定x和y坐标,如何模糊图像?

  • x,y - 每个像素的坐标。
  • IMGH,IMGW - 高度和宽度中的图像的像素
  • R,G,B - 每个像素

代码的红色,绿色,和蓝色的水平使用双for循环做图像中每个像素的东西。我想在这个for循环内做的是为每个像素,我想平均8个周围像素的r,g,b值,并使平均值为中心像素的值。这会产生模糊图像的效果。有人能帮助我吗?

protected void proc_17() { 
    info = ""; 
    for (int y = 0; y < imgH; y++) { 
     for (int x = 0; x < imgW; x++) { 
      int xNext = (x+1) % imgW; 
      int yNext = (y+1) % imgH; 
      float r = (imgOld.getR(xNext, yNext) + imgOld.getR(xNext, yNext))/8; 
      float g = (imgOld.getG(xNext, yNext) + imgOld.getG(xNext, yNext))/8; 
      float b = (imgOld.getB(xNext, yNext) + imgOld.getB(xNext, yNext))/8; 
      imgNew.setR(x, y, r); 
      imgNew.setG(x, y, g); 
      imgNew.setB(x, y, b); 
     } 
    } 
} 
+0

你将需要循环两次,一次计算出新的价值,一旦应用它们。否则将使用一些已经模糊的像素执行计算 – nhouser9

+0

为什么不用'imgOld.getR(xNext,')替换'(imgOld.getR(xNext,yNext)+ imgOld.getR(xNext,yNext))/ 8; yNext)/ 4;'? – CraigR8806

+0

将除法值除以4只是将每个像素的RGB值分开,使得它们更低,这反过来使图像变暗,因为值一律减少。 – Teej

回答

0

平滑和或平均通常与用仅非负元素(权重)与总和等于一个非零对称矩阵卷积完成。通常4-邻居平滑矩阵如下所示:

0.0 0.1 0.0 
0.1 0.6 0.1 
0.0 0.1 0.0 

8邻居:

0.05 0.10 0.05 
0.10 0.20 0.10 
0.05 0.10 0.05 
  • 如果权重求和,以一个然后导致的大小将是相同的作为输入。
  • 对称矩阵不会移位结果...
  • 矩阵的分辨率将给你流畅的距离

现在你可以做到这一点也就地所以通过使用无需额外的图像存储:

0.50 0.25 
0.25 0.00 

然后:

0.00 0.25 
0.25 0.50 

正如你所看到的矩阵不是居中或对称的,所以结果是移动的,但是移位是相反的并且相互否定。该代码是这样的:

for (y=0;y<ys-1;y++) 
for (x=0;x<xs-1;x++) 
    pixel[y][x]=(2*pixel[y][x]+pixel[y+1][x]+pixel[y][x+1])/4; 

for (y=ys-1;y>0;y--) 
for (x=xs-1;x>0;x--) 
    pixel[y][x]=(2*pixel[y][x]+pixel[y-1][x]+pixel[y][x-1])/4; 

你必须单独处理每一个像素的r,g,b粗。 xs,ys是图像分辨率,而pixel[][]是图像的直接像素访问。此外,您必须处理边界像素,以便用不同的矩阵平滑它们,或者将结果图像从每边缩小一个像素(取决于您需要的)。权重导致乘以2并除以4,这可以通过位移操作来实现速度(如果编译器本身不这样做)

为了增加光滑的强度,您可以循环所有这些倍。

for (i=0;i<smooth_strength;i++) 
{ 
for (y=0;y<ys-1;y++) 
    for (x=0;x<xs-1;x++) 
    pixel[y][x]=(2*pixel[y][x]+pixel[y+1][x]+pixel[y][x+1])/4; 

for (y=ys-1;y>0;y--) 
    for (x=xs-1;x>0;x--) 
    pixel[y][x]=(2*pixel[y][x]+pixel[y-1][x]+pixel[y][x-1])/4; 
} 

更多的想法采取看看:

相关问题