Реализация фильтров

This commit is contained in:
Евгений Титаренко 2024-04-19 21:17:03 +03:00
parent 24e2cbb354
commit 3fe2a87e35
4 changed files with 109 additions and 58 deletions

View file

@ -2,11 +2,8 @@
#include "bmpimage.h"
#include "psf.h"
const std::string FILENAME = "../elef.bmp";
const std::string FILENAME_OUT = "../elef_out.bmp";
auto font = readPSF("../fonts/ruscii_8x16_2.psf");
//
void lab01() {
auto og_image = readBMPImage("../elef.bmp");
auto pixels1 = og_image.pixels_copy();
@ -31,7 +28,6 @@ void lab01() {
orig_text, 0, 0).save("../lab01/elef1.bmp");
}
//
void lab02_01() {
auto img = readBMPImage("../tea.bmp");
auto text1024 = textImg(u"1024", &font, 3);
@ -63,7 +59,6 @@ void lab02_01() {
// newImg2->save("../lab02/tea_upscale.bmp");
}
//
void lab02_02() {
auto img = readBMPImage("../tea.bmp");
auto ogText = textImg(u"Оригинал", &font, 3);
@ -103,7 +98,6 @@ void lab02_02() {
gsImg64).appendRight(gsImg32).save("../lab02/tea_grayscale.bmp");
}
//
void lab02_03() {
auto img = readBMPImage("../tea.bmp");
auto text = textImg(u"Оригинал", &font, 3);
@ -134,40 +128,39 @@ void lab02_03() {
}
void lab03() {
auto img = readBMPImage("../tea.bmp");
auto img = readBMPImage("../bike.bmp");
auto imgGS = grayscale(img);
int avrg_mask[9] = {1, 1, 1, 1, 1, 1, 1, 1, 1};
int previtt_mask1[9] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};
int previtt_mask2[9] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};
int sobel_mask1[9] = {-1, 0, 1, -2, 0, 2, -1, 0, 1};
int sobel_mask2[9] = {-1, -2, -1, 0, 0, 0, 1, 2, 1};
auto avrg_text = textImg(u"Осреднение", &font, 3);
auto previtt_text = textImg(u"Фильтр Превитта", &font, 3);
auto median_text = textImg(u"Медиана", &font, 3);
auto prewitt_text = textImg(u"Фильтр Превитта", &font, 3);
auto sobel_text = textImg(u"Фильтр Собеля", &font, 3);
auto text = textImg(u"Оригинал", &font, 3);
auto avrg_image = filter(imgGS, avrg_mask).overlay(avrg_text, 0, 0);
auto previtt_image1 = filter(imgGS, previtt_mask1, 1);//.overlay(previtt_text, 0, 0);
auto previtt_image2 = filter(imgGS, previtt_mask2, 1);//.overlay(previtt_text, 0, 0);
previtt_image1.save("../lab03/previtt1.bmp");
previtt_image2.save("../lab03/previtt2.bmp");
PixelArray previttPixels(previtt_image1.width(), previtt_image1.height());
for (int y = 0; y < previtt_image1.height(); ++y) {
for (int x = 0; x < previtt_image1.width(); ++x) {
previttPixels(y, x) = previtt_image1.pixels()(y, x) + previtt_image2.pixels()(y, x);
auto avrg_image = imgGS.applyFilter(averageFilter).overlay(avrg_text, 0, 0);
auto median_image = imgGS.applyFilter(medianFilter).overlay(median_text, 0, 0);
auto prewitt_dx_image = imgGS.applyFilter(prewittDXFilter);
auto prewitt_dy_image = imgGS.applyFilter(prewittDYFilter);
prewitt_dx_image.save("../lab03/prewitt1.bmp");
prewitt_dy_image.save("../lab03/prewitt2.bmp");
PixelArray prewittPixels(prewitt_dx_image.width(), prewitt_dy_image.height());
for (int y = 0; y < prewitt_dx_image.height(); ++y) {
for (int x = 0; x < prewitt_dx_image.width(); ++x) {
prewittPixels(y, x) = prewitt_dx_image.pixels()(y, x) + prewitt_dy_image.pixels()(y, x);
}
}
auto previtt_image = BMPImage(previttPixels).overlay(previtt_text, 0, 0);
auto sobel_image1 = filter(imgGS, sobel_mask1, 1).overlay(sobel_text, 0, 0);
auto sobel_image2 = filter(imgGS, sobel_mask2, 1).overlay(sobel_text, 0, 0);
PixelArray sobelPixels(sobel_image1.width(), sobel_image2.height());
for (int y = 0; y < sobel_image1.height(); ++y) {
for (int x = 0; x < sobel_image1.width(); ++x) {
previttPixels(y, x) = sobel_image1.pixels()(y, x) + sobel_image2.pixels()(y, x);
auto prewitt_image = BMPImage(prewittPixels).overlay(prewitt_text, 0, 0);
auto sobel_dx_image = imgGS.applyFilter(sobelDXFilter).overlay(sobel_text, 0, 0);
auto sobel_dy_image2 = imgGS.applyFilter(sobelDYFilter).overlay(sobel_text, 0, 0);
PixelArray sobelPixels(sobel_dx_image.width(), sobel_dx_image.height());
for (int y = 0; y < sobel_dx_image.height(); ++y) {
for (int x = 0; x < sobel_dx_image.width(); ++x) {
sobelPixels(y, x) = sobel_dx_image.pixels()(y, x) + sobel_dy_image2.pixels()(y, x);
}
}
auto sobel_image = BMPImage(previttPixels).overlay(sobel_text, 0, 0);
imgGS.overlay(text, 0, 0).appendRight(avrg_image).save("../lab03/avrg_filter.bmp");
imgGS.overlay(text, 0, 0).appendRight(previtt_image).save("../lab03/previtt_filter.bmp");
auto sobel_image = BMPImage(sobelPixels).overlay(sobel_text, 0, 0);
imgGS.overlay(text, 0, 0).appendRight(avrg_image).appendRight(median_image).save("../lab03/avrg_median_filter.bmp");
imgGS.overlay(text, 0, 0).appendRight(prewitt_image).save("../lab03/prewitt_filter.bmp");
imgGS.overlay(text, 0, 0).appendRight(sobel_image).save("../lab03/sobel_filter.bmp");
}