Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bmp.h"
- #include <stdlib.h>
- #include <stdio.h>
- /*
- * Фильтр усиления резкости
- */
- void bmp_sharpener(bmp_image image)
- {
- /* Получаем линейные размеры изображения */
- int w = image.header.width;
- int h = image.header.height;
- /*Создаем копию картинки*/
- double *copy = (double*) malloc(3*w*h*sizeof(double));
- int n;
- for (n=0; n<3*w*h;++n)
- copy[n]=image.pixel_array[n];
- /*Реализуем матрицу усиления резкости*/
- int 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}};
- /*Работа с матрицей*/
- /* Для всех строк пикселей */
- int i,j,r,c,col,line;
- double blue2;
- double green2;
- double red2;
- blue2=9; green2=0; red2=0;
- for (i = 0; i < h; i++) {
- /* Для каждого пикселя */
- for(j = 0; j < w; j++){
- line=0;
- for (r = i-2; r <i+2; r++){ col=0;
- for (c = j-2;c<j+2;c++){
- /*Границы изображения*/
- if(r < 0||r >= h|| c < 0||c >= w) continue;
- blue2+=copy[0 * h * w + r * w + c]*kernel[line][col];
- green2+=copy[1 * h * w + r * w + c]*kernel[line][col];
- red2+=copy[2 * h * w + r * w + c]*kernel[line][col];
- col++;
- }
- line++;
- }
- if (blue2 >1) blue2=1;
- if (blue2 <0) blue2=0;
- if (green2 >1) green2=1;
- if (green2 <0) green2=0;
- if (red2 >1) red2=1;
- if (red2 <0) red2=0;
- image.pixel_array[0 * h * w + i * w + j]=blue2;
- image.pixel_array[1 * h * w + i * w + j]=green2;
- image.pixel_array[2 * h * w + i * w + j]=red2;
- }
- }
- free(copy);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement