1

90x90 的图像被分成 8 个链码方向的 9x9 块,并且需要最小化特征下采样!如何使用 5x5 高斯滤波器将图像下采样为 5x5 块。java中是否有实现高斯滤波器的库函数。

4

1 回答 1

0

我不太清楚您要做什么,但仅用于调整图像大小,您可以使用AffineTransform at = AffineTransform.getTranslateInstance(x, y);然后at.scale(scaleX, scaleY);,但我想您实际上想要模糊图像。这实际上是一个非常简单的过程,我曾经为此编写了一个方法。

public BufferedImage blur(int range, int angle)
{
    BufferedImage b = new BufferedImage(main_image.getWidth() * 2, main_image.getHeight(), BufferedImage.TYPE_INT_RGB);
    Graphics2D g = b.createGraphics();
    
    for(int x = 0; x < main_image.getWidth(); x++)
    {
        for(int y = 0; y < main_image.getHeight(); y++)
        {
            
            int red[] = new int[range * 2], green[] = new int[range * 2], blue[] = new int[range * 2];
            int pixels[] = new int[range * 2];
            
            for(int i = 0; i < pixels.length; i++)
            {
                pixels[i] = main_image.getRGB(clamp(x - clamp(range / 2, 0, range) + i, 0, main_image.getWidth() - 1), clamp(y - clamp(range / 2, 0, range) + (int)(i * Math.toRadians(angle)), 0, main_image.getHeight() - 1));
                
                red[i] = (pixels[i] >> 16) & 0xff;
                green[i] = (pixels[i] >> 8) & 0xff;
                blue[i] = (pixels[i]) & 0xff;
            }
            
            int red_t = 0, green_t = 0, blue_t = 0;
            
            for(int i = 0; i < pixels.length; i++)
            {
                red_t += red[i];
                green_t += green[i];
                blue_t += blue[i];
            }
            
            int r = red_t / (range * 2);
            int gr = green_t / (range * 2);
            int bl = blue_t / (range * 2);
            
            //System.out.println(r + ", " + gr + ", " + bl);
            
            g.setColor(new Color(r, gr, bl));
            g.fillRect(x, y, 1, 1);
            
        }
    }
    g.dispose();
    
    return b;
}

这实际上是一个非常简单的线性拟合器。对于高斯滤波器,您必须将pixelsred和变量转换为二维数组,然后对 y 轴重复整个过程greenblue如果您了解高斯蓝色的工作原理,那么您应该可以毫无问题地实现它或将其更改为高斯滤波器。如果你愿意,你可以问我有关它的东西。

于 2020-07-24T21:05:40.193 回答