Kontext & Motivation
In der industriellen Qualitätskontrolle müssen Bauteile mit hoher Geschwindigkeit und Präzision auf Oberflächenfehler geprüft werden — Kratzer, Dellen, Risse oder Materialfehler. Manuelle Sichtprüfung ist langsam, fehleranfällig und nicht skalierbar.
Ziel dieses Projekts war es, eine vollständige C++ Bildverarbeitungs-Pipeline zu implementieren, die Defekte auf Metalloberflächen automatisch erkennt, annotiert und einen Inspektionsbericht generiert — auf Basis des öffentlichen MVTec AD Benchmark-Datasets.
Domäne
Industrielle Bildverarbeitung, Qualitätskontrolle, Oberflächeninspektion
Performance
0.9ms pro Bild — geeignet für Echtzeit-Inspektion
Dataset
MVTec AD — industrieller Benchmark mit 5000+ Hochauflösungsbildern
Stack
C++17, OpenCV 4.12, CMake, vcpkg
1 — Verarbeitungs-Pipeline
Jedes Bild durchläuft eine mehrstufige Pipeline von der Rohdatei bis zum annotierten Ergebnis:
Preprocessing — ImagePreprocessor Klasse
// Grayscale + Gaussian Blur + Histogram Equalization + Normalization
cv::Mat ImagePreprocessor::process(const cv::Mat& input) const {
cv::Mat result = resize(input); // 256x256
result = toGrayscale(result); // BGR → Gray
result = applyBlur(result); // Gaussian kernel 5x5
result = equalizeHist(result); // Kontrastverstärkung
result = normalize(result); // 0-255 Normalisierung
return result;
}
Defekterkennung — DefectDetector Klasse
// Canny Edge Detection + Morphologie + Konturfilterung
cv::Mat edges = applyEdgeDetection(preprocessed); // Canny(50, 150)
cv::Mat morphed = applyMorphology(edges); // MORPH_CLOSE
auto contours = findDefectContours(morphed); // findContours()
// Konturfilterung nach Fläche
for (const auto& contour : contours) {
double area = cv::contourArea(contour);
if (area >= 100.0 && area <= 50000.0) {
result.defect_count++;
result.defect_bboxes.push_back(cv::boundingRect(contour));
}
}
2 — Software-Architektur
Das Projekt folgt dem objektorientierten C++ Standard mit klarer Trennung von Verantwortlichkeiten:
| Klasse | Datei | Verantwortlichkeit |
|---|---|---|
ImagePreprocessor | preprocessor.hpp/cpp | Bildvorverarbeitung — Blur, Histogram, Normalisierung |
DefectDetector | defect_detector.hpp/cpp | Defekterkennung — Canny, Konturen, Bounding Boxes |
ReportGenerator | report_generator.hpp/cpp | CSV-Report, annotierte Bilder, Statistiken |
main | main.cpp | Pipeline-Orchestrierung, Batch-Verarbeitung |
Build System
# CMake + vcpkg — reproduzierbarer Build cmake .. -G "NMake Makefiles" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" cmake --build . --config Release # → visual_inspection.exe
3 — Ergebnisse auf MVTec AD (Metal Nut)
Getestet auf der Metal Nut Kategorie des MVTec AD Datasets — 115 Bilder mit verschiedenen Defekttypen.
DEFECT (60%)
2 Defekte erkannt — Kratzer auf Metalloberfläche
DEFECT (55%)
1 Defekt erkannt — Oberflächenfehler
Konsolen-Ausgabe
4 — Automatischer CSV-Report
Nach der Verarbeitung wird automatisch ein strukturierter Report generiert:
filename,label,has_defect,defect_count,defect_area,defect_ratio,confidence,processing_time_ms,timestamp 000.png,DEFECT,1,2,1250.0000,0.0190,0.6000,1,2026-06-16 11:15:32 001.png,OK,0,0,0.0000,0.0000,1.0000,1,2026-06-16 11:15:32 002.png,DEFECT,1,1,890.0000,0.0135,0.5500,1,2026-06-16 11:15:32
5 — Zusammenfassung
| Komponente | Technologie | Status |
|---|---|---|
| Programmiersprache | C++17 | ✅ |
| Bildverarbeitung | OpenCV 4.12 | ✅ |
| Build System | CMake + vcpkg | ✅ |
| Edge Detection | Canny Algorithm | ✅ |
| Morphologie | MORPH_CLOSE | ✅ |
| Konturanalyse | findContours + Filterung | ✅ |
| Visualisierung | Bounding Boxes + Labels | ✅ |
| Reporting | CSV + Statistiken | ✅ |
| Dataset | MVTec AD — Metal Nut | ✅ |
| Performance | 0.9ms / Bild | ✅ |
Skills
6 — Ausblick
-
1
Deep Learning Integration
Erweiterung mit OpenCV DNN Modul — vortrainierte Modelle (ResNet, EfficientNet) für höhere Erkennungsgenauigkeit. -
2
Kamera-Integration
Echtzeit-Verarbeitung von Live-Kamerastreams statt statischer Bilder — industrielle GigE Vision oder USB3 Kameras. -
3
Alle MVTec Kategorien
Testen auf allen 15 Kategorien (Bottle, Cable, Carpet, etc.) mit kategoriespezifischen Parametern und Auswertung. -
4
Multithreading
Parallele Verarbeitung mehrerer Bilder gleichzeitig mit C++ Threads — für höheren Durchsatz in der Produktion.