├── 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 |
--------------------------------------------------------------------------------