Visual Inspection with MATLAB
Build machine vision inspection systems using Visual Inspection Toolbox. Select the right approach — rule-based, AI-based, or hybrid — based on problem characteristics, then implement, train, and deploy.
When to Use
Defect detection and classification
- Detecting anomalies on manufactured parts (scratches, dents, contamination)
- Training anomaly detectors with good-part images only (one-class learning)
- Detecting and localizing defects with bounding boxes (YOLOX)
- Classifying defect types or severity levels
Measurement and gauging
- Measuring widths, gaps, angles, diameters on parts
- Calibrated measurement in physical units (mm, degrees)
- Vision fixturing — locating parts and repositioning measurement tools
- Blob analysis — area, perimeter, shape metrics of segmented regions
Counting and localization
- Counting identical rigid parts via shape matching
- Few-shot counting with intra-class variation (CounTR)
- Locating parts by edge geometry for downstream inspection
Training data augmentation
- Generating synthetic labeled data via copy-paste augmentation
- Expanding small defect datasets for YOLOX training
Deployment
- Packaging inspection as standalone executables (MATLAB Compiler)
- Generating C/C++ for embedded/edge targets (MATLAB Coder)
- GPU-accelerated inference with TensorRT (GPU Coder)
- ONNX export for NPUs, AI accelerators, smart camera SDKs
- Deploying to Beckhoff TwinCAT industrial PLCs
When NOT to Use
- Camera acquisition, frame grabber configuration — use Image Acquisition Toolbox
- PLC communication, OPC UA, MQTT protocols — use Industrial Communication Toolbox
- General image processing unrelated to inspection (artistic filters, medical imaging)
Must-Follow Rules
Approach Selection
- Rule-based for geometric, deterministic problems — when defects are dimensional deviations or parts have known geometry, use caliper/fitcircle/matchshape. No training data needed
- AI-based for variable appearance — when defect appearance can't be enumerated, use anomaly detection or YOLOX. Requires training data
- Hybrid when parts move — use
matchshapeto fixture (locate + normalize pose), then AI on the cropped/warped region. Anomaly detectors are NOT rotation/scale invariant
Anomaly Detection
- Anomaly detectors require consistent pose — CNN backbones are not rotation/scale invariant. Fixture with
matchshape+imwarpto canonical orientation before training and inference - Choose detector by data availability — >100 good images:
studentTeacherAnomalyDetector; <100 images:patchCoreAnomalyDetector; have anomaly labels:fcddAnomalyDetector - Use
classifyfor inference — returns[tf, score, map]for anomaly map visualization
Object Detection (YOLOX)
- Use
AutoResize=falsefor full-resolution inference — prevents downscaling that loses small defects. Pair with tiled training when objects are small relative to image - Synthetic data benefits YOLOX most — copy-paste augmentation via
objectInsertionDatastoreis proven for detection tasks
Measurement
- Vision fixturing pattern —
matchshapelocates part → transform measurement positions to detected pose → measure at repositioned locations - Calibrated measurements require
imageToWorldPlane— converts pixel measurements to physical units using camera calibration images.geotrans.Warperfor production rectification — precompute the mapping once, apply per frame for maximum throughput
Deployment
- Always use
persistent+isemptyguard in codegen entry points — load model once, infer many times coder.loadDeepLearningNetworkfor DL models — notcoder.load(which is for structs/shape models)coder.Constantfor MAT file path — codegen requires compile-time constant paths- Pass detector objects directly to
exportONNXNetwork— never extract.Networkor.Backbonefirst. The object-level export includes pre/post-processing logic - ONNX for NPUs/AI accelerators; GPU Coder + TensorRT for NVIDIA — don't use ONNX for Jetson/Orin
Pipeline Construction
Machine vision inspections compose tools in sequence:
- Acquire — Get the image (Image Acquisition Toolbox)
- Fixture — Locate a stable reference feature (
matchshape) - Reposition — Transform measurement positions to detected pose
- Inspect — Apply measurement or classification at repositioned locations
- Decide — Compare to tolerances → pass/fail
- Communicate — Send results to PLC/SCADA (Industrial Communication Toolbox)
Common Hybrid Patterns
| Pattern | Rule-Based Part | AI Part |
|---|---|---|
| Fixture + classify | matchshape locates part, crops ROI | Anomaly detector on cropped region |
| Fixture + detect | matchshape locates part | YOLOX finds defects relative to fixture |
| Pose normalize + anomaly | matchshape + imwarp to canonical pose | Anomaly detector on normalized image |
| Segment + measure | Thresholding / morphology | regionprops on segmented blobs |
Primary Decision: Rule-Based vs. AI-Based
| Choose Rule-Based When | Choose AI-Based When |
|---|---|
| Defects have predictable, enumerable geometry | Defect appearance varies unpredictably |
| Lighting and positioning are tightly controlled | Background or part appearance varies |
| Need dimensional measurements (mm, degrees) | Need classification without precise measurement |
| Few or no labeled examples available | Have labeled training data (or can generate synthetic) |
| Require explainable, auditable decisions | Accuracy matters more than explainability |
Key Functions
| Function | Purpose | Toolbox | Available From |
|---|---|---|---|
shapemodel | Build edge-geometry model from template | Visual Inspection Toolbox | R2026b |
matchshape | Find model instances in search image | Visual Inspection Toolbox | R2026b |
caliper | Measure edge distances along a profile | Visual Inspection Toolbox | R2026b |
fitangle | Measure angle between edges | Visual Inspection Toolbox | R2026b |
fitcircle | Measure circle center and radius | Visual Inspection Toolbox | R2026b |
studentTeacherAnomalyDetector | One-class anomaly detection (>100 good images) | Visual Inspection Toolbox | R2026b |
patchCoreAnomalyDetector | One-class anomaly detection (few-shot, <100 images) | Visual Inspection Toolbox | R2026b |
fastFlowAnomalyDetector | Normalizing-flow anomaly detection | Visual Inspection Toolbox | R2026b |
fcddAnomalyDetector | Semi-supervised anomaly detection | Visual Inspection Toolbox | R2026b |
yoloxObjectDetector | Object/defect detection with bounding boxes | Visual Inspection Toolbox | R2026b |
counTRObjectCounter | Counting with intra-class variation (few-shot) | Visual Inspection Toolbox | R2026b |
objectInsertionDatastore | Synthetic labeled training data (copy-paste) | Visual Inspection Toolbox | R2026b |
regionprops | Blob area, perimeter, shape features | Image Processing Toolbox | R2006a |
imageToWorldPlane | Calibrated world-unit measurement | Computer Vision Toolbox | R2022b |
Decision Trees
"I need to detect defects"
| Situation | Approach |
|---|---|
| Defect appearance unpredictable; good-part images only | Anomaly detection |
| Classify defect types with bounding boxes; have labeled data | YOLOX object detection |
| Defects are geometric deviations from known shape | Shape matching + gauging |
| Dimensional out-of-tolerance (too wide, too narrow) | Caliper / fitcircle / fitangle |
"I need to measure parts"
| Situation | Approach |
|---|---|
| Widths, gaps, edge-to-edge distances | caliper |
| Angles between edges | fitangle |
| Hole diameters, arc radii | fitcircle |
| Area, perimeter, shape of segmented blobs | regionprops |
| Need measurements in mm (physical units) | Camera calibration + rectification |
| Part position varies image-to-image | Vision fixturing with matchshape |
"I need to count objects"
| Situation | Approach |
|---|---|
| Identical rigid parts, controlled background | shapemodel / matchshape |
| Intra-class variation, few labeled examples | CounTR (few-shot counting) |
| Multiple classes, complex scenes, have labels | YOLOX detection → count |
"I need to locate parts"
| Situation | Approach |
|---|---|
| Rigid part, known edge geometry | shapemodel / matchshape |
| Variable appearance, multiple classes | YOLOX detection |
"I don't have enough training data"
| Situation | Approach |
|---|---|
| Have segmented defect examples + clean images | Copy-paste synthetic data |
| Good-part images only (no defect labels) | Anomaly detection (one-class) |
| No data at all, defects are geometric | Rule-based (no training needed) |
"I need to deploy"
| Target | Path |
|---|---|
| Standalone app, full MATLAB features | MATLAB Compiler |
| Monitoring dashboard or UI app | MATLAB Compiler |
| Embedded CPU (x86, ARM) | MATLAB Coder |
| NVIDIA Jetson/Orin or dGPU | GPU Coder + TensorRT |
| NPU or AI accelerator | ONNX export |
| Smart camera with vendor SDK | ONNX export |
| Beckhoff industrial PLC | MATLAB Coder → TwinCAT |
Patterns
Each reference file contains executable code patterns, API calling conventions, and worked examples for its topic. Load the relevant reference before writing code.
Conventions
- Always: use machine vision terminology (rule-based, tool chaining, fixturing)
- Always: recommend the specific VIT function, not generic IPT building blocks
- Always: consider hybrid pipelines (rule-based fixturing + AI classification)
- Always: ensure anomaly detector receives images in consistent pose
- Always: use
persistent+isemptyfor model loading in codegen entry points - Always: pass detector objects directly to
exportONNXNetwork(never extract.Network) - Never: recommend AI when the problem is purely dimensional measurement
- Never: recommend rule-based when defect appearance is highly variable
- Never: use
coder.loadfor deep learning models (usecoder.loadDeepLearningNetwork) - Never: use ONNX export for NVIDIA targets (use GPU Coder + TensorRT)
- Prefer: anomaly detection when only good-part images are available
- Prefer: YOLOX when labeled defect examples with bounding boxes exist
- Prefer:
shapemodel/matchshapeover YOLOX for locating rigid parts - Prefer:
images.geotrans.Warperfor production rectification throughput - Prefer: MATLAB Compiler for dashboards and UI-based monitoring apps
References
| Load when... | Reference |
|---|---|
| Training or using anomaly detectors | references/detect-anomaly.md |
| Locating parts by shape, vision fixturing | references/match-shape.md |
| Training or using YOLOX object detectors | references/detect-objects.md |
| Counting objects (shape matching, CounTR, YOLOX) | references/count-objects.md |
| Measuring with caliper, fitcircle, fitangle | references/measure-gauging.md |
| Blob analysis, regionprops, calibrated measurement | references/blob-analysis.md |
| Deploying models (Compiler, Coder, TensorRT, ONNX) | references/deploy-inspection.md |
| Generating synthetic training data | references/synthetic-data.md |
Copyright 2026 The MathWorks, Inc.


