Я разработал код, который может считывать и обрабатывать биты из 24-битного изображения в формате bmp, в основном применяя фильтры, но теперь я хочу, чтобы мой фильтр размытия также размыл краевые пиксели. Прямо сейчас у меня есть край 1 пикселя, я использую размытие 3x3, и это изображение, которое я получаю после применения размытия:
https://i.stack.imgur.com/0Px6Z.jpg
Я могу сохранить исходные биты из изображения, если я использую оператор if во внутреннем l oop, но это не очень помогает, учитывая, что я хочу, чтобы он был размытым, а не исходными не размытыми битами. Вот код:
>
for (int count = 0; count < times; ++count) {
for (int x = 1; x < H-1; ++x) {
for (int y = 1; y < W-1; ++y) {
double sum1 = 0;
double sum2 = 0;
double sum3 = 0;
for (int k = -1; k <= 1; ++k) {
for (int j = -1; j <= 1; ++j) {
sum1 += bits[((x - j) * W + (y - k)) * 3] * kernel[j + 1][k + 1];
sum2 += bits[((x - j) * W + (y - k)) * 3 + 1] * kernel[j + 1][k + 1];
sum3 += bits[((x - j) * W + (y - k)) * 3 + 2] * kernel[j + 1][k + 1];
}
}
if (sum1 <= 0) sum1 = 0;
if (sum1 >= 255) sum1 = 255;
if (sum2 <= 0) sum2 = 0;
if (sum2 >= 255) sum2 = 255;
if (sum3 <= 0) sum3 = 0;
if (sum3 >= 255) sum3 = 255;
temp[(x * W + y) * 3] = sum1;
temp[(x * W + y) * 3 + 1] = sum2;
temp[(x * W + y) * 3 + 2] = sum3;
}
}
bits = temp;
}
Я знаю, что 5 для вложенных циклов очень медленные, но я бы хотел сначала сделать так, чтобы все работало правильно, но если есть Советы о том, как улучшить это я все уши. Теперь, что касается первого l oop, он применяет фильтр столько раз, сколько вы хотите. Следующие два - это go через вектор как двумерный вектор, а внутренний 2 - для размытия рамки.
Важные вещи, которые необходимо знать: у меня есть вектор битов (RGB), а не только пикселей, поэтому я обрабатываю их один за другим (биты), также мой вектор является 1d-вектором.