gpt4 book ai didi

java - RGB 模糊算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:25 24 4
gpt4 key购买 nike

我试图根据用户输入对图像进行模糊处理。如果它是 1 则模糊图像将平均一个 3X3 正方形并将其放入中间。

P P P       All the pixels will be averaged and put into S.
P S P
P P P

我想我已经想出了一个正确的解决方案,可以处理边缘,但图像完全变黑了。任何人都可以找到此代码的问题还是另一个问题?

int range = blur_slider.getValue();

for (int x = 0; x < source.getWidth(); x++) {
for (int y = 0; y < source.getHeight(); y++) {
double red_sum = 0.0;
double green_sum = 0.0;
double blue_sum = 0.0;
// finds the min x and y values and makes sure there are no out of bounds exceptions

int x_range_min = x - range;
if (x_range_min < 0) {
x_range_min = 0;
}

int x_range_max = x + range;
if (x_range_max >= new_frame.getWidth()) {
x_range_max = new_frame.getWidth() - 1;
}

int y_range_min = y - range;
if (y_range_min < 0) {
y_range_min = 0;
}

int y_range_max = y + range;
if (y_range_max >= new_frame.getHeight()) {
y_range_max = new_frame.getHeight() - 1;
}
// averages the pixels within the min and max values and puts it into the pixel at the center. copy new frame is the frame that has previous
// work done on it, it is used so that new blur pixels that are set do not affect later pixels. new_frame is the main frame that will be set.

for (int k = x_range_min; k < x_range_max; k++) {
for (int j = y_range_min; j < y_range_max; j++) {
Pixel p = copy_new_frame.getPixel(x, y);
red_sum += p.getRed();
green_sum += p.getGreen();
blue_sum += p.getBlue();
}
}
double num_pixels = x_range_max * y_range_max;
ColorPixel tempPixel = new ColorPixel(red_sum / num_pixels, green_sum / num_pixels, blue_sum / num_pixels);
new_frame.setPixel(x, y, tempPixel);
}

}
frame_view.setFrame(new_frame);

最佳答案

是的。像素数

double num_pixels = x_range_max * y_range_max;

您没有减去范围的最小值,因此您假设像素太多并且除以一个太大的值。

更正:

double num_pixels = (x_range_max - x_range_min) * (y_range_max - y_range_min);

@andy 发现了代码中的另一个问题,它可能不会导致黑色像素,但会导致您只采用中间像素而不是正方形中像素的平均值。

您的代码中还有另一个问题导致它占用的区域比您预期的要小。

您应该将 for 循环更改为:

for (int k = x_range_min; k <= x_range_max; k++) {
for (int j = y_range_min; j <= y_range_max; j++) {

以及您对像素数的计算:

double num_pixels = (x_range_max - x_range_min + 1) * (y_range_max - y_range_min + 1);

在您当前的实现中,您缺少最右边和最底部的像素。 IE。你正在这样做(在你应用@andy's fixed 之后 - 在此之前你只是服用'S'):

P P
P S

关于java - RGB 模糊算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23147171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com