Generated banner for Matlab Use Visual Inspection
Generated logo for Matlab Use Visual Inspection

Matlab Use Visual Inspection

MathWorksOfficialCreated by MathWorks

  • Skill
  • Tool integration
  • Software development
  • BSD-2-Clause
  • No issues found

From the author

Build machine vision inspection systems with MATLAB Visual Inspection Toolbox. Covers the full arc from problem selection through deployment: anomaly detection (Student-Teacher, PatchCore, FastFlow, FCDD), object detection (YOLOX), counting (CounTR, shape matching), gauging and measurement (caliper, fitcircle, fitangle), blob analysis (regionprops, calibrated measurement), shape matching for fixturing and localization, synthetic data generation for training augmentation, and deployment to standalone apps, embedded C/C++, NVIDIA GPUs (TensorRT), NPUs (ONNX), and Beckhoff PLCs. Routes to rule-based tools when problems are geometric and deterministic, AI-based tools when defect appearance varies, and hybrid pipelines combining both.
— the description by MathWorks

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to developing machine vision inspection systems, guiding users through the selection of rule-based, AI-based, or hybrid pipelines. It covers the entire development lifecycle, from initial problem analysis and data preparation to model training and deployment across various hardware targets, including embedded systems, GPUs, and industrial PLCs.

What it does

  • Selects between rule-based, AI-based, or hybrid inspection strategies.
  • Implements anomaly detection, object detection, counting, and gauging.
  • Supports synthetic data generation for training augmentation.
  • Provides deployment paths for standalone apps, C/C++, TensorRT, ONNX, and PLCs.
  • Offers guidance on vision fixturing and calibrated measurements.
  • Includes specific patterns for high-performance production inference.

When to use it

  • When building automated defect detection or classification systems.
  • When performing precise dimensional measurements or gauging on parts.
  • When counting objects with varying levels of visual complexity.
  • When deploying inspection models to edge devices or industrial controllers.
  • When you need to combine geometric rule-based logic with AI-based flexibility.

Advantages

  • Covers the full development arc from problem selection to deployment.
  • Provides clear decision criteria for choosing between rule-based and AI approaches.
  • Optimized for industrial performance with support for hardware-specific acceleration.
  • Includes robust patterns for vision fixturing and pose normalization.
  • Reduces development time by providing pre-built functions for common inspection tasks.

Usage examples

“How do I choose between rule-based and AI-based inspection for my manufacturing line?”
The skill provides a decision matrix comparing defect predictability, lighting control, data availability, and the need for explainability to guide your choice.
“I need to deploy a deep learning inspection model to an NVIDIA Jetson device.”
The skill instructs you to use GPU Coder with TensorRT, providing specific rules for model loading and export to ensure high-performance inference.
“How can I measure parts in millimeters when my camera has lens distortion?”
The skill guides you to use camera calibration and imageToWorldPlane to rectify the image, enabling direct measurement in physical units using regionprops.
“My parts move on a conveyor; how do I ensure my anomaly detector works?”
The skill mandates using matchshape for vision fixturing to normalize the part pose before passing the cropped region to the anomaly detector.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/matlab/matlab-use-visual-inspection/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip matlab-use-visual-inspection.zip -d .agents/skills

Documentation by MathWorks

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 matchshape to 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 + imwarp to canonical orientation before training and inference

  • Choose detector by data availability — >100 good images: studentTeacherAnomalyDetector; <100 images: patchCoreAnomalyDetector; have anomaly labels: fcddAnomalyDetector

  • Use classify for inference — returns [tf, score, map] for anomaly map visualization

Object Detection (YOLOX)
  • Use AutoResize=false for 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 objectInsertionDatastore is proven for detection tasks

Measurement
  • Vision fixturing pattern — matchshape locates 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.Warper for production rectification — precompute the mapping once, apply per frame for maximum throughput

Deployment
  • Always use persistent + isempty guard in codegen entry points — load model once, infer many times

  • coder.loadDeepLearningNetwork for DL models — not coder.load (which is for structs/shape models)

  • coder.Constant for MAT file path — codegen requires compile-time constant paths

  • Pass detector objects directly to exportONNXNetwork — never extract .Network or .Backbone first. 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:

  1. Acquire — Get the image (Image Acquisition Toolbox)

  2. Fixture — Locate a stable reference feature (matchshape)

  3. Reposition — Transform measurement positions to detected pose

  4. Inspect — Apply measurement or classification at repositioned locations

  5. Decide — Compare to tolerances → pass/fail

  6. Communicate — Send results to PLC/SCADA (Industrial Communication Toolbox)

Common Hybrid Patterns
PatternRule-Based PartAI Part
Fixture + classifymatchshape locates part, crops ROIAnomaly detector on cropped region
Fixture + detectmatchshape locates partYOLOX finds defects relative to fixture
Pose normalize + anomalymatchshape + imwarp to canonical poseAnomaly detector on normalized image
Segment + measureThresholding / morphologyregionprops on segmented blobs

Primary Decision: Rule-Based vs. AI-Based

Choose Rule-Based WhenChoose AI-Based When
Defects have predictable, enumerable geometryDefect appearance varies unpredictably
Lighting and positioning are tightly controlledBackground or part appearance varies
Need dimensional measurements (mm, degrees)Need classification without precise measurement
Few or no labeled examples availableHave labeled training data (or can generate synthetic)
Require explainable, auditable decisionsAccuracy matters more than explainability

Key Functions

FunctionPurposeToolboxAvailable From
shapemodelBuild edge-geometry model from templateVisual Inspection ToolboxR2026b
matchshapeFind model instances in search imageVisual Inspection ToolboxR2026b
caliperMeasure edge distances along a profileVisual Inspection ToolboxR2026b
fitangleMeasure angle between edgesVisual Inspection ToolboxR2026b
fitcircleMeasure circle center and radiusVisual Inspection ToolboxR2026b
studentTeacherAnomalyDetectorOne-class anomaly detection (>100 good images)Visual Inspection ToolboxR2026b
patchCoreAnomalyDetectorOne-class anomaly detection (few-shot, <100 images)Visual Inspection ToolboxR2026b
fastFlowAnomalyDetectorNormalizing-flow anomaly detectionVisual Inspection ToolboxR2026b
fcddAnomalyDetectorSemi-supervised anomaly detectionVisual Inspection ToolboxR2026b
yoloxObjectDetectorObject/defect detection with bounding boxesVisual Inspection ToolboxR2026b
counTRObjectCounterCounting with intra-class variation (few-shot)Visual Inspection ToolboxR2026b
objectInsertionDatastoreSynthetic labeled training data (copy-paste)Visual Inspection ToolboxR2026b
regionpropsBlob area, perimeter, shape featuresImage Processing ToolboxR2006a
imageToWorldPlaneCalibrated world-unit measurementComputer Vision ToolboxR2022b

Decision Trees

"I need to detect defects"
SituationApproach
Defect appearance unpredictable; good-part images onlyAnomaly detection
Classify defect types with bounding boxes; have labeled dataYOLOX object detection
Defects are geometric deviations from known shapeShape matching + gauging
Dimensional out-of-tolerance (too wide, too narrow)Caliper / fitcircle / fitangle
"I need to measure parts"
SituationApproach
Widths, gaps, edge-to-edge distancescaliper
Angles between edgesfitangle
Hole diameters, arc radiifitcircle
Area, perimeter, shape of segmented blobsregionprops
Need measurements in mm (physical units)Camera calibration + rectification
Part position varies image-to-imageVision fixturing with matchshape
"I need to count objects"
SituationApproach
Identical rigid parts, controlled backgroundshapemodel / matchshape
Intra-class variation, few labeled examplesCounTR (few-shot counting)
Multiple classes, complex scenes, have labelsYOLOX detection → count
"I need to locate parts"
SituationApproach
Rigid part, known edge geometryshapemodel / matchshape
Variable appearance, multiple classesYOLOX detection
"I don't have enough training data"
SituationApproach
Have segmented defect examples + clean imagesCopy-paste synthetic data
Good-part images only (no defect labels)Anomaly detection (one-class)
No data at all, defects are geometricRule-based (no training needed)
"I need to deploy"
TargetPath
Standalone app, full MATLAB featuresMATLAB Compiler
Monitoring dashboard or UI appMATLAB Compiler
Embedded CPU (x86, ARM)MATLAB Coder
NVIDIA Jetson/Orin or dGPUGPU Coder + TensorRT
NPU or AI acceleratorONNX export
Smart camera with vendor SDKONNX export
Beckhoff industrial PLCMATLAB 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 + isempty for 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.load for deep learning models (use coder.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/matchshape over YOLOX for locating rigid parts

  • Prefer: images.geotrans.Warper for production rectification throughput

  • Prefer: MATLAB Compiler for dashboards and UI-based monitoring apps

References
Load when...Reference
Training or using anomaly detectorsreferences/detect-anomaly.md
Locating parts by shape, vision fixturingreferences/match-shape.md
Training or using YOLOX object detectorsreferences/detect-objects.md
Counting objects (shape matching, CounTR, YOLOX)references/count-objects.md
Measuring with caliper, fitcircle, fitanglereferences/measure-gauging.md
Blob analysis, regionprops, calibrated measurementreferences/blob-analysis.md
Deploying models (Compiler, Coder, TensorRT, ONNX)references/deploy-inspection.md
Generating synthetic training datareferences/synthetic-data.md

Copyright 2026 The MathWorks, Inc.


Files

references/detect-objects.md

Object Detection with YOLOX

Train YOLOX object detectors on labeled industrial images and detect defects with bounding boxes. YOLOX is anchor-free with built-in FPN for multi-scale feature fusion — the recommended detector for industrial defect detection.

When to Use

  • Defect detection requiring bounding box localization

  • Multi-class defect detection (scratches, cracks, missing components, etc.)

  • Small object detection in high-resolution industrial images

  • Deploying object detectors to hardware via MATLAB Coder / GPU Coder

When NOT to Use

  • Anomaly detection without defect labels — see references/detect-anomaly.md

  • Template matching / part localization — see references/match-shape.md

  • Pixel-level segmentation — use semantic segmentation

  • Only need binary good/bad without localization — use anomaly detection

Model Selection

VariantSpeedAccuracyUse When
"small-coco"ModerateHigherDefault choice — best P/R vs. latency tradeoff
"tiny-coco"FastLowerConstrained hardware, real-time needs

Larger models give better precision/recall at the cost of higher latency and compute. "tiny-coco" is the smallest non-depthwise architecture — nano variants use depthwise convolutions that may not be faster on actual hardware despite smaller parameter counts.

Default recommendation: Use "small-coco" for training unless deployment hardware requires the lower latency of "tiny-coco".

Resolution Strategy

StrategyWhenKey Setting
Standard (default)Defects visible at training InputSize, GPU fits full batchInputSize=[H W 3] — auto-resizes images
Tiled training + full-res inferenceSmall defects lost by resize, full image fits in memoryTrain on tiles, detect(..., AutoResize=false)
Tiled training + tiled inferenceFull image does not fit in CPU/GPU memory at inferenceTile at inference, stitch results with NMS

The preferred inference approach is AutoResize=false — a single forward pass on the full-resolution image. This leverages the fully convolutional architecture, is faster, and is easier to deploy via code generation. Use tiled inference with stitching only when the full image exceeds available memory.

Use tiled training when defects are small relative to image size and GPU memory limits training at full resolution.

Workflow

  1. Organize data — images + annotation tables with bounding boxes and labels

  2. Create datastores — imageDatastore + boxLabelDatastore → combine

  3. Split data — subset with shuffled indices into train/val/test

  4. Augment — transform with geometric augmentations (flip, scale, translate)

  5. Create detector — yoloxObjectDetector(variant, classNames, InputSize=sz)

  6. Train — trainYOLOXObjectDetector with trainingOptions

  7. Evaluate — evaluateObjectDetection → summarize, precisionRecall

  8. Select threshold — choose operating point from PR curve

  9. Deploy — detect at chosen threshold; optionally generate code

Key Functions

FunctionPurposeToolbox
yoloxObjectDetectorCreate/configure YOLOX detectorVisual Inspection Toolbox
trainYOLOXObjectDetectorTrain detector on labeled dataVisual Inspection Toolbox
detectRun inference — returns [bboxes, scores, labels]Visual Inspection Toolbox
evaluateObjectDetectionCompute AP, precision-recall per classComputer Vision Toolbox
mAPObjectDetectionMetricTraining metric for validation monitoringComputer Vision Toolbox
boxLabelDatastoreDatastore for bounding box + label dataComputer Vision Toolbox
blockLocationsWithROISelect tile locations containing objects (tiled workflow)Computer Vision Toolbox
balanceBoxLabelsBalance tile sampling across classesComputer Vision Toolbox
blockedImageRepresent large images as tiled blocksImage Processing Toolbox
insertObjectAnnotationDraw bounding boxes on images for displayComputer Vision Toolbox

Patterns

Standard Training Pipeline
imds = imageDatastore(imageDir, IncludeSubfolders=true);
blds = boxLabelDatastore(annotationTable);
ds = combine(imds, blds);

numImages = ds.numpartitions;
shuffledIdx = randperm(numImages);
numTrain = floor(0.7 * numImages);
numVal = floor(0.15 * numImages);
dsTrain = subset(ds, shuffledIdx(1:numTrain));
dsVal = subset(ds, shuffledIdx(numTrain+1:numTrain+numVal));
dsTest = subset(ds, shuffledIdx(numTrain+numVal+1:end));

dsTrain = transform(dsTrain, @augmentData);

detector = yoloxObjectDetector("small-coco", classNames, InputSize=[800 800 3]);
options = trainingOptions("sgdm", ...
    InitialLearnRate=5e-4, ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.99, ...
    LearnRateDropPeriod=1, ...
    MaxEpochs=100, ...
    MiniBatchSize=20, ...
    Shuffle="every-epoch", ...
    ValidationData=dsVal, ...
    ValidationFrequency=100, ...
    ResetInputNormalization=false, ...
    OutputNetwork="best-validation-loss", ...
    Metrics=mAPObjectDetectionMetric(Name="mAP50"), ...
    ObjectiveMetricName="mAP50", ...
    L2Regularization=5e-4);

[detector, info] = trainYOLOXObjectDetector(dsTrain, detector, options);

Images are automatically resized to InputSize during training and inference by default. Choose InputSize large enough that your smallest defects occupy at least a few pixels after resizing.

ResetInputNormalization
  • false — use for standard uint8 [0,255] images (the common case with COCO pretrained backbones). Skips recomputation of normalization statistics, which speeds up training startup.

  • true — use when input data is outside the [0,255] range expected by the COCO pretrained backbone (e.g., normalized floats, 16-bit images, non-standard intensity ranges). Recomputes mean/std from your training data.

Data Augmentation

Use geometric augmentations that preserve bounding box validity:

function data = augmentData(A)
data = cell(size(A));
for ii = 1:size(A, 1)
    I = A{ii, 1};
    bboxes = A{ii, 2};
    labels = A{ii, 3};
    sz = size(I);
    tform = randomAffine2d(XReflection=true, Scale=[1 1.1]);
    rout = affineOutputView(sz, tform, BoundsStyle="centerOutput");
    I = imwarp(I, tform, OutputView=rout);
    [bboxes, indices] = bboxwarp(bboxes, tform, rout, OverlapThreshold=0.25);
    labels = labels(indices);
    if isempty(indices)
        data(ii, :) = A(ii, :);
    else
        data(ii, :) = {I, bboxes, labels};
    end
end
end
Detection and Visualization
[bboxes, scores, labels] = detect(detector, img, Threshold=0.5);
annotatedImg = insertObjectAnnotation(img, "rectangle", bboxes, labels);
imshow(annotatedImg)
Full-Resolution Inference

After tiled training, infer on the full image without resizing:

[bboxes, scores, labels] = detect(detector, fullResImg, AutoResize=false, Threshold=0.5);

This is faster and easier to deploy than tiled inference. It works as long as the full image fits in CPU/GPU memory. Use MiniBatchSize=1 when running on a datastore to limit memory usage.

Evaluation with Precision-Recall

Run detection at a low threshold to capture the full score range, then analyze:

detResults = detect(detector, dsTest, Threshold=0.01);
metrics = evaluateObjectDetection(detResults, dsTest);
[summaryDataset, summaryClass] = summarize(metrics);

Extract precision-recall curve for threshold selection:

[precision, recall, scores] = precisionRecall(metrics, ClassNames="defect");
Threshold Selection Strategies

Choose the operating point based on application requirements:

[precision, recall, scores] = precisionRecall(metrics, ClassNames="defect");
P = precision{1};
R = recall{1};
S = scores{1};

f1 = 2 * (P .* R) ./ (P + R);
[~, idxF1] = max(f1);
threshMaxF1 = S(idxF1);

targetRecall = 0.95;
idxRecall = find(R >= targetRecall, 1, "last");
threshFixRecall = S(idxRecall);

targetPrecision = 0.95;
idxPrecision = find(P >= targetPrecision, 1, "last");
threshFixPrecision = S(idxPrecision);
StrategyWhenTradeoff
Max F1General-purpose balancedEqual weight to P and R
Fix recall (e.g., 0.95)Safety-critical — cannot miss defectsTolerates more false alarms
Fix precision (e.g., 0.95)High-throughput — false alarms are costlyMay miss some defects
Size-Based Performance Analysis

Evaluate detection performance stratified by object size:

metrics = evaluateObjectDetection(detResults, dsTest);
boxPrctileBoundaries = prctile(boxArea, [33 66]);
areaMetrics = metricsByArea(metrics, [0, boxPrctileBoundaries, Inf]);

This reveals whether small defects need the tiled training workflow.

Class Imbalance Handling

Use ClassWeights when defect classes are imbalanced:

[detector, info] = trainYOLOXObjectDetector(dsTrain, detector, options, ...
    ClassWeights=[1 2 3 1 5 2]);

Higher weights increase the classification loss contribution for rare classes.

Transfer Learning with Frozen Backbone

For small datasets, freeze the pretrained backbone initially:

[detector, info] = trainYOLOXObjectDetector(dsTrain, detector, options, ...
    FreezeSubNetwork="backbone");

Then unfreeze and fine-tune with a lower learning rate for best results.

Decision Framework: InputSize

Image ResolutionDefect SizeRecommended Approach
≤1024×1024>20×20 px at inputStandard with InputSize matching image
>1024×1024Still visible after resizeStandard with InputSize=[800 800 3] or similar
>1024×1024<20×20 px after resizeTiled training + full-res inference

If defects are too small after resizing to InputSize, switch to tiled training: train on crops, infer on the full image with AutoResize=false.

Conventions

  • Always: use combine(imds, blds) to create training datastores — not manual cell construction

  • Always: use evaluateObjectDetection + precisionRecall for threshold selection — not ad-hoc score sweeps

  • Always: use mAPObjectDetectionMetric as the validation metric during training

  • Prefer: AutoResize=false single-pass inference — faster, deployable via code generation

  • Prefer: "small-coco" over "tiny-coco" unless hardware-constrained

  • Prefer: geometric augmentations (flip, scale, translate) that preserve box validity via bboxwarp

  • Fall back to: tiled inference with NMS stitching only when full image exceeds available memory

Common Mistakes

MistakeWhy It's WrongCorrect Approach
Defaulting to tiled inference with stitchingUnnecessary when image fits memory; harder to deploydetect(detector, img, AutoResize=false) for full-res
Evaluating at default Threshold=0.25Misses the full PR curvedetect(..., Threshold=0.01) then analyze PR
Not specifying InputSizeNetwork uses default size, may lose small defectsExplicit InputSize based on defect visibility
Ad-hoc threshold selectionNo principled tradeoffUse PR curve: Max F1, fix recall, or fix precision
Ignoring class imbalanceRare defects get low APClassWeights proportional to inverse frequency

Copyright 2026 The MathWorks, Inc.


Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
MathWorks
Publisher
MathWorks (Official)
Source
matlab/matlab-agentic-toolkit · skills-catalog/image-processing-and-computer-vision/matlab-use-visual-inspection · commit 2a7f215
Licence
BSD 2-Clause License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE.md)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by MathWorks or MathWorks.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download matlab-use-visual-inspection.zip