├── run.sh ├── imgs ├── 1.bmp ├── 2.bmp ├── 3.bmp ├── 4.bmp ├── 5.bmp ├── 6.bmp ├── 7.bmp └── 8.bmp ├── Result ├── 1.png ├── 2.png ├── 3.png └── 4.png ├── GuideFilter.cpp ├── HazeRemoval.cpp ├── DarkChannel.h ├── README.md ├── GuideFilter.h ├── compile.sh ├── HazeRemoval.h ├── Common.h ├── picture.cpp └── DarkChannel.cpp /run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/en sh 2 | ./picture 3 | -------------------------------------------------------------------------------- /imgs/1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/1.bmp -------------------------------------------------------------------------------- /imgs/2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/2.bmp -------------------------------------------------------------------------------- /imgs/3.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/3.bmp -------------------------------------------------------------------------------- /imgs/4.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/4.bmp -------------------------------------------------------------------------------- /imgs/5.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/5.bmp -------------------------------------------------------------------------------- /imgs/6.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/6.bmp -------------------------------------------------------------------------------- /imgs/7.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/7.bmp -------------------------------------------------------------------------------- /imgs/8.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/imgs/8.bmp -------------------------------------------------------------------------------- /Result/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/Result/1.png -------------------------------------------------------------------------------- /Result/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/Result/2.png -------------------------------------------------------------------------------- /Result/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/Result/3.png -------------------------------------------------------------------------------- /Result/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/Result/4.png -------------------------------------------------------------------------------- /GuideFilter.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/GuideFilter.cpp -------------------------------------------------------------------------------- /HazeRemoval.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rock-100/Single-Image-Haze-Removal-Using-Dark-Channel-Prior/HEAD/HazeRemoval.cpp -------------------------------------------------------------------------------- /DarkChannel.h: -------------------------------------------------------------------------------- 1 | #ifndef __DARKCHANNEL__ 2 | #define __DARKCHANNEL__ 3 | 4 | #include "Common.h" 5 | 6 | extern void DarkChannel(Mat &source, Mat &output, int r); 7 | 8 | 9 | #endif 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /GuideFilter.h: -------------------------------------------------------------------------------- 1 | #ifndef __GUIDEFILTER__ 2 | #define __GUIDEFILTER__ 3 | 4 | #include "Common.h" 5 | 6 | extern void GuideFilter(Mat &source, Mat &guided_image, Mat &output, int radius, double epsilon); 7 | 8 | 9 | #endif 10 | 11 | -------------------------------------------------------------------------------- /compile.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/en sh 2 | echo "compile picture" 3 | g++ -o picture picture.cpp Common.h DarkChannel.h DarkChannel.cpp GuideFilter.h GuideFilter.cpp HazeRemoval.h HazeRemoval.cpp -std=c++11 -O3 `pkg-config --cflags --libs opencv` 4 | echo "done" 5 | -------------------------------------------------------------------------------- /HazeRemoval.h: -------------------------------------------------------------------------------- 1 | #ifndef __HAZEREMOVAL__ 2 | #define __HAZEREMOVAL__ 3 | 4 | #include "Common.h" 5 | 6 | extern void HazeRemoval(Mat &source, Mat &output, int minr = 5, int maxA = 230, double w = 0.98, int guider = 30, double guideeps = 0.001, int L = 0); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /Common.h: -------------------------------------------------------------------------------- 1 | #ifndef __COMMON__ 2 | #define __COMMON__ 3 | 4 | #include 5 | using namespace cv; 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | using namespace std; 13 | 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /picture.cpp: -------------------------------------------------------------------------------- 1 | #include "HazeRemoval.h" 2 | #include "GuideFilter.h" 3 | #include "DarkChannel.h" 4 | 5 | int main() 6 | { 7 | for (int i = 1; i <=8; i++) 8 | { 9 | Mat src = imread("imgs/" + to_string(i) + ".bmp"); 10 | Mat res; 11 | 12 | HazeRemoval(src, res); 13 | 14 | imshow("Input", src); 15 | imshow("Dehaze", res); 16 | 17 | waitKey(0); 18 | } 19 | return 0; 20 | } 21 | -------------------------------------------------------------------------------- /DarkChannel.cpp: -------------------------------------------------------------------------------- 1 | #include "DarkChannel.h" 2 | 3 | static void MinFilter(Mat &source, Mat &output, int r) 4 | { 5 | Mat input; 6 | source.copyTo(input); 7 | 8 | output.create(source.rows, source.cols, CV_8U); 9 | for (int i = 0; i <= (input.rows - 1) / r; i++) 10 | { 11 | for (int j = 0; j <= (input.cols - 1) / r; j++) 12 | { 13 | int w = r; 14 | int h = r; 15 | if (i * r + h > input.rows) 16 | { 17 | h = input.rows - i * r; 18 | } 19 | if (j * r + w > input.cols) 20 | { 21 | w = input.cols - j * r; 22 | } 23 | 24 | Mat ROI = input(Rect(j * r, i * r, w, h)); 25 | 26 | double mmin; 27 | minMaxLoc(ROI, &mmin, 0); 28 | 29 | Mat desROI = output(Rect(j * r, i * r, w, h)); 30 | desROI.setTo(uchar(mmin)); 31 | } 32 | } 33 | } 34 | void DarkChannel(Mat &source, Mat &output, int r) 35 | { 36 | Mat input; 37 | input.create(source.rows, source.cols, CV_8U); 38 | 39 | for (int i = 0; i < source.rows; i++) 40 | { 41 | uchar *sourcedata = source.ptr(i); 42 | uchar *indata = input.ptr(i); 43 | for (int j = 0; j < source.cols * source.channels(); j += 3) 44 | { 45 | uchar mmin; 46 | mmin = min(sourcedata[j], sourcedata[j + 1]); 47 | mmin = min(mmin, sourcedata[j + 2]); 48 | 49 | indata[j / 3] = mmin; 50 | } 51 | } 52 | 53 | MinFilter(input, output, r); 54 | } 55 | --------------------------------------------------------------------------------