Skip to content

Commit

Permalink
add
Browse files Browse the repository at this point in the history
  • Loading branch information
yoyoyo-yo committed Oct 13, 2019
1 parent ec9e3c6 commit 9d7d235
Show file tree
Hide file tree
Showing 9 changed files with 507 additions and 352 deletions.
61 changes: 38 additions & 23 deletions Question_11_20/answers_cpp/answer_11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,38 +3,53 @@
#include <iostream>
#include <math.h>

int main(int argc, const char* argv[]){
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);

int width = img.rows;
int height = img.cols;

// mean filter
cv::Mat mean_filter(cv::Mat img, int kernel_size){
int height = img.rows;
int width = img.cols;
int channel = img.channels();

// prepare output
cv::Mat out = cv::Mat::zeros(height, width, CV_8UC3);
int k_size = 3;
int p = floor(k_size / 2);

// prepare kernel
int pad = floor(kernel_size / 2);

// filtering
double v = 0;
int vs[kernel_size * kernel_size];
int count = 0;

for (int j = 0; j < height; j++){
for (int i = 0; i < width; i++){
for (int c = 0; c < 3; c++){
v = 0;

for (int _j = -p; _j < p+1; _j++){
for (int _i = -p; _i < p+1; _i++){
if (((j+_j) >= 0) && ((i+_i) >= 0) && ((j+_j) < height) && ((i+_i) < width)){
v += (int)img.at<cv::Vec3b>(j+_j, i+_i)[c];
}
}
}

v /= (k_size * k_size);
out.at<cv::Vec3b>(j,i)[c] = (uchar)v;
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
for (int c = 0; c < channel; c++){
v = 0;

// get pixel sum
for (int dy = -pad; dy < pad + 1; dy++){
for (int dx = -pad; dx < pad + 1; dx++){
if (((y + dy) >= 0) && ((x + dx) >= 0)){
v += (int)img.at<cv::Vec3b>(y + dy, x + dx)[c];
}
}
}

// assign mean value
v /= (kernel_size * kernel_size);
out.at<cv::Vec3b>(y, x)[c] = (uchar)v;
}
}
}
return out;
}

int main(int argc, const char* argv[]){
// read image
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);

// mean filter
cv::Mat out = mean_filter(img, 3);

//cv::imwrite("out.jpg", out);
cv::imshow("answer", out);
Expand Down
65 changes: 44 additions & 21 deletions Question_11_20/answers_cpp/answer_12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,60 @@
#include <iostream>
#include <math.h>

int main(int argc, const char* argv[]){
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);

int width = img.rows;
int height = img.cols;

// motion filter
cv::Mat motion_filter(cv::Mat img, int kernel_size){
int height = img.rows;
int width = img.cols;
int channel = img.channels();

// prepare output
cv::Mat out = cv::Mat::zeros(height, width, CV_8UC3);

int k_size = 3;
int p = floor(k_size / 2);

double k[k_size][k_size] = {{1./3, 0, 0}, {0, 1./3, 0}, {0, 0, 1./3}};
// prepare kernel
int pad = floor(kernel_size / 2);

double kernel[kernel_size][kernel_size];//{{1./3, 0, 0}, {0, 1./3, 0}, {0, 0, 1./3}};

for(int y = 0; y < kernel_size; y++){
for(int x = 0; x < kernel_size; x++){
if (y == x){
kernel[y][x] = 1. / kernel_size;
} else {
kernel[y][x] = 0;
}
}
}

// filtering
double v = 0;

for (int j = 0; j < height; j++){
for (int i = 0; i < width; i++){
for (int c = 0; c < 3; c++){
v = 0;
for (int _j = -p; _j < p+1; _j++){
for (int _i = -p; _i < p+1; _i++){
if (((j+_j) >= 0) && ((i+_i) >= 0) && ((j+_j) < height) && ((i+_i) < width)){
v += (double)img.at<cv::Vec3b>(j+_j, i+_i)[c] * k[_j+p][_i+p];
}
}
}
out.at<cv::Vec3b>(j,i)[c] = (uchar)v;
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
for (int c = 0; c < channel; c++){

v = 0;

for (int dy = -pad; dy < pad + 1; dy++){
for (int dx = -pad; dx < pad + 1; dx++){
if (((y + dy) >= 0) && (( x + dx) >= 0) && ((y + dy) < height) && ((x + dx) < width)){
v += (double)img.at<cv::Vec3b>(y + dy, x + dx)[c] * kernel[dy + pad][dx + pad];
}
}
}
out.at<cv::Vec3b>(y, x)[c] = (uchar)v;
}
}
}
return out;
}

int main(int argc, const char* argv[]){
// read image
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);

// motion filter
cv::Mat out = motion_filter(img, 3);

//cv::imwrite("out.jpg", out);
cv::imshow("answer", out);
Expand Down
88 changes: 54 additions & 34 deletions Question_11_20/answers_cpp/answer_13.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,54 +3,74 @@
#include <iostream>
#include <math.h>

int main(int argc, const char* argv[]){
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);
// BGR -> Gray
cv::Mat BGR2GRAY(cv::Mat img){
// get height and width
int width = img.cols;
int height = img.rows;

int width = img.rows;
int height = img.cols;
// prepare output
cv::Mat out = cv::Mat::zeros(height, width, CV_8UC1);

// gray scale
cv::Mat gray = cv::Mat::zeros(height, width, CV_8UC1);

for (int j=0; j<height; j++){
for (int i=0; i<width; i++){
gray.at<uchar>(j, i) = (int)((float)img.at<cv::Vec3b>(j,i)[0] * 0.0722 + \
(float)img.at<cv::Vec3b>(j,i)[1] * 0.7152 + \
(float)img.at<cv::Vec3b>(j,i)[2] * 0.2126);
// each y, x
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
// BGR -> Gray
out.at<uchar>(y, x) = 0.2126 * (float)img.at<cv::Vec3b>(y, x)[2] \
+ 0.7152 * (float)img.at<cv::Vec3b>(y, x)[1] \
+ 0.0722 * (float)img.at<cv::Vec3b>(y, x)[0];
}
}
return out;
}

// max min filter
cv::Mat max_min_filter(cv::Mat img, int kernel_size){
int height = img.rows;
int width = img.cols;
int channel = img.channels();

// prepare output
cv::Mat out = cv::Mat::zeros(height, width, CV_8UC1);

// kernel
int k_size = 3;
int p = floor(k_size / 2);

double k[k_size][k_size] = {{1./3, 0, 0}, {0, 1./3, 0}, {0, 0, 1./3}};

// filtering
int pad = floor(kernel_size / 2);

double vmax = 0, vmin = 999, v = 0;

for (int j = 0; j < height; j++){
for (int i = 0; i < width; i++){

// filtering
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
vmax = 0;
vmin = 999;
for (int _j = -p; _j < p+1; _j++){
for (int _i = -p; _i < p+1; _i++){
if (((j+_j) >= 0) && ((i+_i) >= 0) && ((j+_j) < height) && ((i+_i) < width)){
v = gray.at<uchar>(j+_j, i+_i);
if (v > vmax){
vmax = v;
}
if (v < vmin){
vmin = v;
}
}
}
for (int dy = -pad; dy < pad + 1; dy++){
for (int dx = -pad; dx < pad + 1; dx++){
if (((y + dy) >= 0) && (( x + dx) >= 0) && ((y + dy) < height) && ((x + dx) < width)){
v = (double)img.at<uchar>(y + dy, x + dx);
if (v > vmax){
vmax = v;
}
if (v < vmin){
vmin = v;
}
}
}
}
out.at<uchar>(j,i) = vmax - vmin;
out.at<uchar>(y, x) = (uchar)(vmax - vmin);
}
}
return out;
}

int main(int argc, const char* argv[]){
// read image
cv::Mat img = cv::imread("imori.jpg", cv::IMREAD_COLOR);

// BGR -> Gray
cv::Mat gray = BGR2GRAY(img);

// max min filter
cv::Mat out = max_min_filter(gray, 3);

//cv::imwrite("out.jpg", out);
cv::imshow("answer", out);
Expand Down
Loading

0 comments on commit 9d7d235

Please sign in to comment.