Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bmp.h"
- #include <stdlib.h>
- /**
- * bmp_sharpener -- фильтр "Усиление резкости"
- *
- * Copyright (c) 2019, Anastasia Feofanova
- *
- * This code is licensed under a MIT-style license.
- */
- void bmp_sharpener(bmp_image image) {
- /* Получаем линейные размеры изображения */
- int w = image.header.width;
- int h = image.header.height;
- /*Выделяем память под такое же изображение*/
- double *copy = (double *)malloc(w * h * 3 * sizeof(double));
- int i, j ,k ,l;
- /*Реализуем матрицу свёртки*/
- double kernel[5][5] = {{-1,-1,-1,-1,-1},
- {-1,-1,-1,-1,-1},
- {-1,-1,25,-1,-1},
- {-1,-1,-1,-1,-1},
- {-1,-1,-1,-1,-1}};
- /* Для всех строк пикселей */
- for (i = 0; i < h ; i++) {
- /* Для каждого пикселя */
- for(j = 0; j < w ; j++) {
- /*Обнуляем значения переменных*/
- double blue2 = 0; double green2 = 0; double red2 = 0;
- for(k = i-2 ; k <= i +2; k++) {
- for(l = j-2 ; l <= j +2; l++) {
- /*Не заходим за границы изображения (пропускаем их)*/
- if(k < 0||k >= h|| l < 0||l >= w) continue;
- /*Получаем цвета каждого пикселя*/
- double blue = image.pixel_array[0 * h * w + k * w + l];
- double green = image.pixel_array[1 * h * w + k * w + l];
- double red = image.pixel_array[2 * h * w + k * w + l];
- /*Применяем фильтр*/
- blue2 += kernel[k - (i - 2)][l - (j - 2)] * blue;
- green2 += kernel[k - (i - 2)][l - (j -2)] * green;
- red2 += kernel[k - (i - 2)][l - (j - 2)] * red;
- }
- }
- /*Следим за тем, чтобы не сбились цвета, в случае выхода за предел*/
- blue2 > 1 ? blue2 =1 : blue2;
- blue2 < 0 ? blue2 =0 : blue2;
- green2 > 1 ? green2 =1 : green2;
- green2 < 0 ? green2 =0 : green2;
- red2 > 1 ? red2 =1 : red2;
- red2 < 0 ? red2 =0 : red2;
- /*Присваиваем копии новые значения*/
- copy[0 * h * w + i * w + j] = blue2;
- copy[1 * h * w + i * w + j] = green2;
- copy[2 * h * w + i * w + j] = red2;
- }
- }
- for(i = 0; i < h; i++) {
- for (j = 0; j < w ;j++) {
- image.pixel_array[0 * h * w + i * w + j] = copy[0 * h * w + i * w + j];
- image.pixel_array[1 * h * w + i * w + j] = copy[1 * h * w + i * w + j];
- image.pixel_array[2 * h * w + i * w + j] = copy[2 * h * w + i * w + j];
- }
- }
- free(copy);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement