-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathMain.cpp
More file actions
171 lines (158 loc) · 6.43 KB
/
Copy pathMain.cpp
File metadata and controls
171 lines (158 loc) · 6.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
//===- Main.cpp -----------------------------------------------------------===//
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//===----------------------------------------------------------------------===//
//
// This is the main file of the image processing benchmark.
//
//===----------------------------------------------------------------------===//
#include <iostream>
#include <benchmark/benchmark.h>
#include <stdexcept>
#include <buddy/Core/Container.h>
#include <buddy/DIP/ImageContainer.h>
#include <buddy/DIP/imgcodecs/loadsave.h>
void initializeMLIRConv2D(char **, Img<float, 2>);
void initializeBuddyConv2D(char **, Img<float, 2>);
void initializeBuddyCorr2D(char **, Img<float, 2>);
void initializeBuddyMorph2D(char **, Img<float, 2>);
void initializeOpenCVMorph2D(char **);
void initializeOpenCVFilter2D(char **);
void initializeEigenConvolve2D(char **, Img<float, 2>);
void initializeBuddyResize2D(char **, Img<float, 2>);
void initializeBuddyRotate2D(char **, Img<float, 2>);
void initializeBuddyRotate4D(char **);
void initializeOpenCVResize2D(char **);
void initializeOpenCVRotate2D(char **);
void generateResultMLIRConv2D(Img<float, 2>);
void generateResultBuddyConv2D(Img<float, 2>);
void generateResultBuddyCorr2D(char **argv, Img<float, 2>);
void generateResultBuddyResize2D(char **argv, Img<float, 2>);
void generateResultBuddyRotate2D(char **argv, Img<float, 2>);
void generateResultBuddyRotate4D(char **);
void generateResultBuddyErosion2D(char **, Img<float, 2>);
void generateResultBuddyOpening2D(char **, Img<float, 2>);
void generateResultBuddyClosing2D(char **, Img<float, 2>);
void generateResultBuddyTopHat2D(char **, Img<float, 2>);
void generateResultBuddyBottomHat2D(char **, Img<float, 2>);
void generateResultBuddyMorphGrad2D(char **, Img<float, 2>);
void generateResultBuddyDilation2D(char **, Img<float, 2>);
void generateResultOpenCVErode2D();
void generateResultOpenCVDilate2D();
void generateResultOpenCVFilter2D();
void generateResultOpenCVOpening2D();
void generateResultOpenCVClosing2D();
void generateResultOpenCVTopHat2D();
void generateResultOpenCVBottomHat2D();
void generateResultOpenCVMorphGrad2D();
void generateResultOpenCVResize2D();
void generateResultOpenCVRotate2D();
void generateResultEigenConvolve2D();
void registerBenchmarkBuddyCorr2D();
void registerBenchmarkBuddyErosion2D();
void registerBenchmarkBuddyDilation2D();
void registerBenchmarkBuddyOpening2D();
void registerBenchmarkBuddyClosing2D();
void registerBenchmarkBuddyTopHat2D();
void registerBenchmarkBuddyBottomHat2D();
void registerBenchmarkBuddyMorphGrad2D();
void registerBenchmarkOpenCVErode2D();
void registerBenchmarkOpenCVDilate2D();
void registerBenchmarkOpenCVOpening2D();
void registerBenchmarkOpenCVClosing2D();
void registerBenchmarkOpenCVTopHat2D();
void registerBenchmarkOpenCVBottomHat2D();
void registerBenchmarkOpenCVMorphGrad2D();
void registerBenchmarkOpenCVFilter2D();
void registerBenchmarkBuddyResize2D();
void registerBenchmarkBuddyRotate2D();
void registerBenchmarkBuddyRotate4D();
void registerBenchmarkOpenCVResize2D();
void registerBenchmarkOpenCVRotate2D();
// Run benchmarks.
int main(int argc, char **argv) {
if (argc != 5) {
throw std::invalid_argument(
"Wrong format of command line arguments.\n"
"Correct format is ./image-processing-benchmark <image path> <kernel "
"name> <kernelmorph> <Boundary Option>\n where "
"image path provides path of the image to be processed, kernel name "
"denotes the name "
"of desired kernel as specified in "
"kernelmorph denotes the kernel to be used for morphological operations"
"include/ImageProcessing/Kernels.h and Boundary options available "
"are CONSTANT_PADDING, REPLICATE_PADDING.\n");
}
Img<float, 2> img = dip::imread<float, 2>(argv[1], dip::IMGRD_GRAYSCALE);
initializeMLIRConv2D(argv, img);
initializeBuddyConv2D(argv, img);
initializeBuddyCorr2D(argv, img);
initializeBuddyMorph2D(argv, img);
initializeOpenCVMorph2D(argv);
initializeOpenCVFilter2D(argv);
initializeEigenConvolve2D(argv, img);
initializeBuddyResize2D(argv, img);
initializeBuddyRotate2D(argv, img);
initializeBuddyRotate4D(argv);
initializeOpenCVResize2D(argv);
initializeOpenCVRotate2D(argv);
registerBenchmarkBuddyCorr2D();
registerBenchmarkOpenCVFilter2D();
registerBenchmarkBuddyResize2D();
registerBenchmarkBuddyRotate2D();
registerBenchmarkBuddyRotate4D();
registerBenchmarkOpenCVResize2D();
registerBenchmarkOpenCVRotate2D();
registerBenchmarkBuddyErosion2D();
registerBenchmarkBuddyDilation2D();
registerBenchmarkBuddyOpening2D();
registerBenchmarkBuddyClosing2D();
registerBenchmarkBuddyTopHat2D();
registerBenchmarkBuddyBottomHat2D();
registerBenchmarkOpenCVErode2D();
registerBenchmarkOpenCVOpening2D();
registerBenchmarkOpenCVClosing2D();
registerBenchmarkOpenCVTopHat2D();
registerBenchmarkOpenCVBottomHat2D();
registerBenchmarkOpenCVMorphGrad2D();
registerBenchmarkOpenCVDilate2D();
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
// Generate result image.
generateResultMLIRConv2D(img);
generateResultOpenCVFilter2D();
generateResultBuddyConv2D(img);
generateResultBuddyCorr2D(argv, img);
generateResultBuddyRotate2D(argv, img);
generateResultBuddyRotate4D(argv);
generateResultBuddyResize2D(argv, img);
generateResultBuddyErosion2D(argv, img);
generateResultBuddyDilation2D(argv, img);
generateResultBuddyOpening2D(argv, img);
generateResultBuddyClosing2D(argv, img);
generateResultBuddyTopHat2D(argv, img);
generateResultBuddyBottomHat2D(argv, img);
generateResultBuddyMorphGrad2D(argv, img);
generateResultOpenCVTopHat2D();
generateResultOpenCVBottomHat2D();
generateResultOpenCVMorphGrad2D();
generateResultOpenCVErode2D();
generateResultOpenCVDilate2D();
generateResultOpenCVOpening2D();
generateResultOpenCVClosing2D();
generateResultOpenCVResize2D();
generateResultOpenCVRotate2D();
generateResultEigenConvolve2D();
return 0;
}