ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Median Filtering
    영상처리 2022. 6. 6. 19:55
    // assign1_medianFiltering.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
    //
    
    #include <iostream>
    #include <algorithm>
    #include <opencv2/highgui.hpp>
    #include "opencv2/core.hpp"
    #include "opencv2/imgproc.hpp"
    
    using namespace cv;
    using namespace std;
    
    void myMedianFilter(InputArray input, OutputArray output, int windowSize) {
    
        //windowSize의 입력이 2n+1의 형태로 들어오므로 반대로 n 찾기
        windowSize = (windowSize - 1) / 2;
    
        const Mat& img = input.getMat();
        output.create(img.size(), img.type());  //새로운 행렬 생성
        Mat dst = output.getMat();
    
        vector<uchar> vec((2*windowSize +1)*(2 * windowSize + 1));
    
    
        for (int y = 0; y < img.rows; y++) {
            for (int x = 0; x < img.cols; x++) {
                
                for (int t = -windowSize; t <= windowSize; t++) {
                    for (int s = -windowSize; s <= windowSize; s++) {
                       
                       vec.push_back(img.at<uchar>((y + t), (x + s)));
                       dst.at<uchar>(y,x) = img.at<uchar>(min(img.rows - 1, max(0, y + t)), min(img.cols - 1, max(0, x + s)));  //Padding 조치
    
                    }
                    
                }
                sort(vec.begin(), vec.end());
                dst.at<uchar>(y, x) = vec.at(vec.size()/2);
    
                vec.clear();
    
            }
        }
       
    
        
    }
    
    int main()
    {
        Mat img = imread("C://Users/User/Desktop/MedianFilterInput.png", 0);
        Mat out1, out2;
        int windowsize = 5;
        myMedianFilter(img, out1, windowsize);
    
        //medianBlur(img, out2, windowsize);
    
        imshow("image", img);
        imshow("MedianFilter", out1);
        //imshow("medianBlur", out2);
    
        waitKey();
    
        return 0;
    
    }
Designed by Tistory.