Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- void medianFilter(const char* in_filename, const char* out_filename, unsigned kernel_size) {
- // Загружаем изображение
- unsigned error;
- unsigned char* image;
- unsigned width, height;
- error = lodepng_decode24_file(&image, &width, &height, in_filename);
- if (error) {
- cerr << "Failed to load image: " << lodepng_error_text(error) << endl;
- return;
- }
- // Фильтр медианного значения
- unsigned kernel_radius = kernel_size / 2;
- vector<unsigned char> pixels(kernel_size * kernel_size * 3);
- for (unsigned y = 0; y < height; y++) {
- for (unsigned x = 0; x < width; x++) {
- for (unsigned c = 0; c < 3; c++) {
- unsigned index = (y * width + x) * 3 + c;
- // Заполняем ядро пикселей
- for (unsigned ky = 0; ky < kernel_size; ky++) {
- for (unsigned kx = 0; kx < kernel_size; kx++) {
- unsigned px = min(max(int(x) + kx - kernel_radius, 0), int(width) - 1);
- unsigned py = min(max(int(y) + ky - kernel_radius, 0), int(height) - 1);
- unsigned kindex = (ky * kernel_size + kx) * 3 + c;
- pixels[kindex] = image[(py * width + px) * 3 + c];
- }
- }
- // Сортируем пиксели в ядре и берем медианное значение
- sort(pixels.begin(), pixels.end());
- unsigned median_index = pixels.size() / 2;
- image[index] = pixels[median_index];
- }
- }
- }
- // Сохраняем изображение
- error = lodepng_encode24_file(out_filename, image, width, height);
- if (error) {
- cerr << "Failed to save image: " << lodepng_error_text(error) << endl;
- return;
- }
- // Освобождаем память
- free(image);
- }
- int main() {
- // Задаем имена входного и выходного файлов и размер ядра фильтра
- const char* in_filename = "input.png";
- const char* out_filename = "output.png";
- unsigned kernel_size = 3;
- // Фильтр медианного значения
- medianFilter(in_filename, out_filename, kernel_size);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement