Generated banner for Matlab Enhance Camera Image
Generated logo for Matlab Enhance Camera Image

Matlab Enhance Camera Image

MathWorksOfficialCreated by MathWorks

  • Skill
  • Workflow
  • Science and research
  • BSD-2-Clause
  • No issues found

From the author

Read BEFORE troubleshooting or enhancing camera image quality. Diagnoses and enhances image quality from cameras connected via Image Acquisition Toolbox or USB Webcams support package. Discovers camera capabilities at runtime, analyzes captured images for quality issues (brightness, contrast, sharpness, noise, color balance, backlighting), suggests hardware setting adjustments tailored to the specific camera, and applies Image Processing Toolbox enhancement functions. Use when a user wants to improve camera image quality, troubleshoot dark/blurry/noisy/grainy/ overexposed/washed out/color cast images, or optimize camera settings.
— the description by MathWorks

AutoGineer summary

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

This skill provides a structured, hardware-first approach to troubleshooting and enhancing images from cameras connected via MATLAB. It guides users through discovering camera capabilities, diagnosing quality issues like poor exposure, noise, or blur, and applying targeted hardware adjustments followed by software-based post-processing. The workflow emphasizes fixing issues at the source before using Image Processing Toolbox functions, ensuring optimal results for scientific and technical imaging tasks.

What it does

  • Diagnoses image quality metrics including brightness, contrast, sharpness, noise, and color balance.
  • Discovers and reports camera hardware properties at runtime for precise adjustment.
  • Provides a decision table to map specific quality issues to hardware or software fixes.
  • Applies Image Processing Toolbox functions in a recommended order to prevent quality degradation.
  • Generates a reusable, custom MATLAB function for automated future image acquisition and enhancement.
  • Supports both Image Acquisition Toolbox and USB Webcam support package interfaces.

When to use it

  • When a camera feed appears too dark, blurry, noisy, or washed out.
  • When you need to optimize camera settings for a specific scientific or technical application.
  • When you need to perform consistent, repeatable image enhancement on captured frames.
  • When you want to diagnose whether an image issue is caused by hardware settings or requires software correction.

Advantages

  • Prioritizes hardware-level adjustments to maintain original image integrity.
  • Prevents common pitfalls like sharpening noise or misinterpreting YUY2 color spaces.
  • Automates the creation of custom acquisition pipelines for future use.
  • Provides objective diagnostic metrics to quantify image quality improvements.

Usage examples

“My camera image is very dark and noisy. Can you help me fix it?”
The agent will connect to the camera, run a diagnostic to quantify the brightness and noise levels, suggest specific hardware adjustments like increasing exposure or reducing gain, and then apply denoising filters if necessary.
“I need a script to capture images from my webcam that are always sharpened and brightened.”
The agent will guide you through the manual tuning process to find the best settings, then generate a custom .m file that automates the connection, capture, and post-processing steps for future use.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/matlab/matlab-enhance-camera-image/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip matlab-enhance-camera-image.zip -d .agents/skills

Documentation by MathWorks

Purpose

Diagnose image quality issues from any connected camera and improve them through a combination of hardware setting adjustments and software post-processing. Operates in a hardware-first, software-second philosophy: always try to fix at the source before resorting to post-processing.

When to Use

  • User complains about poor image quality from a camera (too dark, blurry, noisy, washed out)

  • User asks how to improve or optimize camera settings

  • User captures an image and wants to enhance it

  • User mentions backlit subject, underexposed, overexposed, or out of focus

When NOT to Use

  • General image processing on files not from a camera (use IPT directly)

  • Building an image acquisition pipeline from scratch (use Image Acquisition Toolbox docs)

  • Camera geometric calibration (use Camera Calibrator app)

Reference Documents (load when needed)

Script Entrypoints

  • scripts/diagnoseImageQuality.m — reusable diagnostic function; takes an image, returns a struct of quality metrics with assessments

Hard Requirements

  • Call detect_matlab_toolboxes first to confirm Image Acquisition Toolbox and Image Processing Toolbox are installed

  • Call check_matlab_code on any script before executing it

  • Never hardcode camera property names — always discover at runtime

Protocol

Step 1 — Connect and Discover Camera Capabilities

API selection: When Image Acquisition Toolbox is available, always prefer videoinput over other interfaces like webcam(). videoinput exposes more properties (via propinfo), supports bulk frame acquisition (getdata), and provides FramesAcquiredFcn for streaming. Use webcam() only when Image Acquisition Toolbox is not installed and the user has the MATLAB Support Package for USB Webcams instead.

Connect to the camera and enumerate all available properties:

% For videoinput (preferred when Image Acquisition Toolbox is available):
vid = videoinput(adaptorName, deviceID, format);
vid.ReturnedColorSpace = 'rgb';  % Critical for YUY2 cameras
src = getselectedsource(vid);
props = properties(src);

% For webcam (fallback when only USB Webcams support package is installed):
cam = webcam();
props = properties(cam);

Classify each discovered property by function:

Problem DomainCommon Property Names
Brightness/ExposureExposure, ExposureTime, ExposureMode, Brightness, Gain, BacklightCompensation
FocusFocus, FocusMode
ColorWhiteBalance, WhiteBalanceMode, Hue, Saturation, ColorEnable
Contrast/ToneContrast, Gamma, Sharpness

Record valid ranges for each property. Report discovered capabilities to the user.

For properties that do NOT match the classification table above, apply the advanced property investigation protocol:

  1. Group unrecognized properties by naming pattern (e.g., names containing "Trigger", "Pixel", "Bin", "LUT", "ROI", "Offset", "Decimation")

  2. For videoinput sources, use propinfo(src, propName) to determine type, constraint, range, and read-only status

  3. Classify as quality-relevant (likely affects image appearance: Binning, BlackLevel, LUT, DigitalGain, HDR) vs functional (affects acquisition mode, not quality: TriggerMode, PixelFormat, PacketSize, AcquisitionFrameRate)

  4. Report all discovered properties to the user, distinguishing standard (known) from advanced (discovered)

  5. For quality-relevant unknowns, follow the safe investigation protocol in references/hardware-tuning-guidance.md

Step 2 — Capture Baseline Image

For videoinput objects (preferred):

% Warm up the camera (critical — first frames are often blank or poorly exposed)
preview(vid);
pause(2);
closepreview(vid);

% Capture the reference image
baselineImg = getsnapshot(vid);
imshow(baselineImg);
title("Baseline Image");

For webcam objects (fallback):

% Warm up the camera (critical — first frames are often blank or poorly exposed)
preview(cam);
pause(2);
closePreview(cam);

% Capture the reference image
baselineImg = snapshot(cam);
imshow(baselineImg);
title("Baseline Image");

Note: snapshot() is webcam-only. For videoinput, use getsnapshot(vid). Both webcam and videoinput objects support preview().

Record current property values as baseline for comparison.

Step 3 — Understand User Concern

Before running diagnostics, identify what the user is trying to fix:

  • If the user already stated a specific complaint (e.g., "image is too dark", "I see banding"), note it as the primary concern

  • If the user has not stated a specific issue, ask: "What specific quality issue are you seeing, or would you like me to run a general assessment?"

  • If the user says "just make it better" or has no specific concern, proceed with the standard 6-metric evaluation only

Map the user's concern to one of these categories:

  • Standard metrics (covered by diagnoseImageQuality.m): brightness, contrast, sharpness, noise, color balance, backlighting

  • Extended concerns (require dynamic inline evaluation): vignetting, banding/striping, saturation clipping, flicker/inconsistency, chromatic aberration, distortion, or other

If the concern is an extended one, note it for dynamic evaluation in Step 4.

Step 4 — Diagnose Image Quality

Run the diagnostic script (always — provides the standard baseline):

addpath("scripts");
results = diagnoseImageQuality(baselineImg);
disp(results);

The function returns a struct with fields:

  • brightness — mean intensity, assessment

  • clipping — highlight clipping (% pixels ≥ 250) and shadow clipping (% pixels ≤ 5), assessment

  • contrast — standard deviation, assessment

  • sharpness — Laplacian variance, assessment

  • noise — estimated noise level, assessment

  • colorBalance — R/G and B/G ratios, assessment

  • backlightRatio — center-vs-border brightness ratio, assessment

Each field has .value (numeric or struct) and .assessment ("OK", "Problem", or "Severe").

Identify the primary issue(s) — focus on fields assessed as "Problem" or "Severe".

Dynamic evaluation for extended concerns: If the user's concern from Step 3 is not covered by the standard 6 metrics, generate inline MATLAB code to evaluate it. See references/diagnosis-guidance.md § "Extended Metrics" for evaluation patterns and code templates. Report the extended metric result alongside the standard results.

Step 5 — Suggest Hardware Adjustments

Map diagnosed problems to available camera properties using the decision table below. Only suggest adjustments for properties the camera actually has.

Apply settings, re-capture, and compare metrics. Change one property at a time.

For videoinput objects (preferred):

% Example: increase exposure for dark image
src.Exposure = src.Exposure + 2;
newImg = getsnapshot(vid);
newResults = diagnoseImageQuality(newImg);

For webcam objects (fallback):

% Example: increase exposure for dark image
cam.Exposure = cam.Exposure + 2;
newImg = snapshot(cam);
newResults = diagnoseImageQuality(newImg);

Note: With videoinput, set properties on the source object (src), not the videoinput object. Use getsnapshot(vid) instead of snapshot().

Iterate if needed until metrics improve or hardware options are exhausted.

Step 6 — Apply Post-Processing Enhancement

Based on remaining issues after hardware adjustment, apply IPT functions in the correct order:

  1. Brighten (if still dark): imlocalbrighten, imadjust, gamma correction

  2. Contrast (if still flat): locallapfilt, adapthisteq on luminance channel

  3. Sharpen (if still soft): imsharpen — always last

enhanced = baselineImg;

% Example: brighten a backlit image
enhanced = imlocalbrighten(enhanced, 0.8);

% Example: enhance local contrast
enhanced = locallapfilt(enhanced, 0.3, 1.5);

% Example: sharpen (last step)
enhanced = imsharpen(enhanced, 'Radius', 1.5, 'Amount', 1.0);

Display before/after comparison:

montage({baselineImg, enhanced}, 'Size', [1 2]);
title("Before vs After Enhancement");
Step 7 — Report and Generate Reusable Pipeline

Summarize the full workflow:

  1. Original problem identified

  2. Hardware adjustments applied and their effect

  3. Software enhancements applied

  4. Final metrics comparison (before vs after)

Generate a reusable .m function file that the user can call for future captures without the agent. Write it to a user-specified folder if provided, otherwise to the current MATLAB working directory (pwd). Do NOT write it to the skill's scripts/ folder — that is reserved for the skill's own helper functions.

After writing the file:

  • Run check_matlab_code on it to verify syntax

  • Show the user how to call it

  • Explain which settings and enhancements are baked in

Single-Shot Pipeline

The function should:

  1. Connect to the camera with the discovered adaptor, device ID, and format

  2. Set ReturnedColorSpace = 'rgb' if the camera outputs YUY2 or other non-RGB format

  3. Apply the tuned hardware property settings that improved metrics

  4. Warm up the camera (discard initial frames)

  5. Capture a frame

  6. Apply only the post-processing steps that measurably improved quality (in correct order)

  7. Clean up (stop and delete the videoinput object)

  8. Return the enhanced image

Decision Table

Diagnosed ProblemHardware Fix (if available)Software Fix (IPT)
Subject too dark (backlit)BacklightCompensation ↑, Exposure ↑, Brightness ↑imlocalbrighten, inverted imreducehaze
Overall underexposedExposure ↑, Gain ↑, Brightness ↑Gamma correction (.^ 0.7), imadjust
Overall overexposedExposure ↓, Brightness ↓imadjust with output range [0 0.8]
Low contrastContrast ↑, Gamma adjustlocallapfilt, adapthisteq on luminance
Motion blurExposure ↓ (faster shutter)imsharpen (limited), deconvolution
Out of focusFocus adjust (if available)imsharpen (limited help)
High noiseGain ↓, Exposure ↑ insteadimgaussfilt, imnlmfilt, wiener2
Color castWhiteBalance adjust, WhiteBalanceMode=autoManual white point correction
Washed outGamma ↓, Contrast ↑imadjust, locallapfilt

Generated Pipeline Templates

Replace placeholders with discovered values. Only include enhancement steps that measurably improved metrics.

Single-Shot Template (videoinput)
function img = acquireEnhancedImage()
%acquireEnhancedImage Capture and enhance image from <camera name>.
%   img = acquireEnhancedImage() returns an enhanced RGB image.

    vid = videoinput('<adaptor>', <deviceID>, '<format>');
    vid.ReturnedColorSpace = 'rgb';
    src = getselectedsource(vid);

    % Tuned hardware settings
    src.<Property1> = <value>;
    src.<Property2> = <value>;

    % Warm up
    preview(vid);
    pause(2);
    closepreview(vid);

    % Capture
    img = getsnapshot(vid);
    delete(vid);

    % Enhancement pipeline (only steps that helped)
    img = imlocalbrighten(img, <amount>);
    img = imgaussfilt(img, <sigma>);
end

Naming: use acquireEnhancedImage as default, or ask user for a preferred name. Follow lowerCamelCase. See references/enhancement-guidance.md § "Generating Reusable Functions" for parameterization and optional-input guidance.

Gotchas

  • localtonemap requires single input — always convert with im2single() first; passing uint8 throws an error

  • Camera warm-up is critical — first 5–10 frames are often blank or poorly exposed. Use preview() or discard initial snapshots before capturing

  • adapthisteq (CLAHE) needs a single-channel image — apply on V channel (HSV) or L channel (Lab), not directly on RGB

  • Prefer Exposure over Gain — when a camera has both, increasing Exposure gives cleaner results; Gain amplifies noise

  • BacklightCompensation range varies — some cameras 0–1, others 0–2, others 0–255. Always check range at runtime

  • imlocalbrighten only lifts dark regions — preserves already-bright areas; preferred over global brightness increase for backlit scenes

  • Post-processing order matters — brighten first, then local contrast, then sharpen last. Sharpening amplifies noise if applied before denoising

  • Auto modes override manual values — set ExposureMode/WhiteBalanceMode to manual before adjusting the corresponding value

  • Resolution changes may reset properties — re-check property values after changing resolution

  • YUY2 cameras need ReturnedColorSpace = 'rgb' — many USB webcams (e.g., Microsoft LifeCam) only output YUY2. Without setting vid.ReturnedColorSpace = 'rgb', getsnapshot returns raw YCbCr data misinterpreted as RGB, causing wrong colors in display AND incorrect results from IPT functions and diagnostic metrics

  • snapshot vs getsnapshot — snapshot(cam) is webcam-only; getsnapshot(vid) is for videoinput objects. They are not interchangeable

  • closePreview vs closepreview — webcam uses camelCase closePreview(cam); videoinput uses lowercase closepreview(vid). Using the wrong case throws "Undefined command/function"

  • videoinput prefers bulk getdata — for multi-frame capture with videoinput, use getdata(vid, N) instead of looping getsnapshot. It fetches N frames in one call with less overhead and lets the adaptor run at full speed

  • Use fullfile for file saves — when saving images or generated files, use fullfile(pwd, 'filename.png') to avoid path resolution errors across platforms


Copyright 2026 The MathWorks, Inc.


Files

references/hardware-tuning-guidance.md

Hardware Tuning Guidance — Property Discovery and Camera-Type Patterns

Property Discovery: webcam Objects

cam = webcam();              % Connect to default camera
cam = webcam(deviceName);    % Connect by name
props = properties(cam);     % List all settable properties

To inspect a specific property's current value:

cam.Brightness              % Direct property access

To check available values (for enumerated properties like Resolution):

cam.AvailableResolutions    % Cell array of resolution strings

Webcam objects expose properties directly as object fields. There is no propinfo equivalent — valid ranges must be discovered by trial or documentation.

Property Discovery: videoinput Objects

vid = videoinput(adaptorName, deviceID, format);
src = getselectedsource(vid);
props = properties(src);          % All source property names
info = propinfo(src, 'Brightness'); % Detailed property info

propinfo returns a struct with:

  • Type: 'double', 'integer', 'string', 'enum'

  • Constraint: 'bounded', 'enum', 'none'

  • ConstraintValue: [min max] for bounded, cell array for enum

  • DefaultValue: factory default

  • ReadOnly: 'always', 'whileRunning', 'never'

Always use propinfo to discover valid ranges before suggesting values.

Common Camera Types and Typical Properties

USB Webcams (via webcam() or winvideo/linuxvideo/macvideo adaptor)
PropertyTypical RangeNotes
Brightness0–255 or -64 to 64Midpoint is neutral
Contrast0–255 or 0–100
Saturation0–255 or 0–100
Sharpness0–255 or 0–7Camera-side sharpening
Gamma72–500 or 1–10Often stored as 100× actual value
Exposure-13 to -1 or -11 to 1Log2 scale (negative = faster)
ExposureModeauto / manualAuto overrides manual Exposure value
Gain0–255 or 0–100Amplifies signal and noise
BacklightCompensation0–1, 0–2, or 0–255Range varies widely by camera
WhiteBalance2800–6500Color temperature in Kelvin
WhiteBalanceModeauto / manualAuto overrides manual WhiteBalance
Focus0–255 or 0–40
FocusModeauto / manual
GigE / GenICam Industrial Cameras
PropertyTypical RangeNotes
ExposureTime10–1000000 μsDirect microsecond control
Gain0–48 dBOften fine-grained (0.1 dB steps)
GainAutoOff / Once / Continuous
BalanceWhiteAutoOff / Once / Continuous
BalanceRatio0.5–4.0Per-channel (Red, Blue selectable)
Gamma0.25–4.0Actual gamma value
BlackLevel0–255Offset added to sensor output
ExposureAutoOff / Once / Continuous
DCAM / IIDC Cameras (firewire, legacy)
PropertyTypical RangeNotes
Brightness0–255DC offset
Shutter0–4095Exposure time (camera-specific units)
Gain0–255Analog gain
WhiteBalanceTwo values (U, V)Separate blue/red balance
Gamma0–1On/off only on some cameras

Safe Adjustment Strategy

  1. Change one property at a time — multiple simultaneous changes make it impossible to determine which helped

  2. Re-capture after each change — wait for 2-3 frames to stabilize (auto-exposure/auto-WB may need time)

  3. Compare metrics quantitatively — use diagnoseImageQuality before and after

  4. Record baseline — save initial property values so you can revert

  5. Prefer hardware over software — fixing at the source preserves full dynamic range

Adjustment Priority Order

For a given problem, try properties in this order (most effective first):

ProblemPriority Order
Too darkExposure ↑ → Brightness ↑ → Gain ↑ (last resort)
Too brightExposure ↓ → Brightness ↓
BacklitBacklightCompensation ↑ → Exposure ↑ → Gamma ↑
NoisyGain ↓ → Exposure ↑ (compensate)
Blurry (motion)Exposure ↓ (faster shutter)
Blurry (focus)FocusMode=manual → Focus adjust
Color castWhiteBalanceMode=auto → WhiteBalance manual adjust
Low contrastContrast ↑ → Gamma adjust

Investigating Unfamiliar Properties

When a camera exposes properties not listed in the tables above, use this protocol to reason about them safely.

Naming Heuristics
Name PatternLikely FunctionQuality-Relevant?
Binning, BinningHorizontal, BinningVerticalPixel binning (combines adjacent pixels)Yes — affects resolution and noise
BlackLevel, BlackLevelRawSensor offset / pedestalYes — affects shadow detail
DigitalGain, DigitalShiftDigital amplification after ADCYes — amplifies noise like analog Gain
LUTEnable, LUTIndex, LUTValueLook-up table for tone mappingYes — remaps pixel values
HDRMode, WDRHigh dynamic range modeYes — changes exposure strategy
ROI, OffsetX, OffsetY, Width, HeightRegion of interestPartially — changes captured region, not quality
TriggerMode, TriggerSource, TriggerDelayExternal trigger configurationNo — acquisition timing, not quality
PixelFormat, PixelSizeData format (Mono8, BayerRG12, etc.)Partially — bit depth affects dynamic range
PacketSize, StreamBytesPerSecondNetwork transport (GigE)No — bandwidth, not quality
AcquisitionFrameRate, FrameRateFrame rate controlIndirectly — may constrain max exposure time
DeviceTemperature, DeviceLinkSpeedSensor/device statusNo — read-only diagnostics
Scoping Discovery on Feature-Rich Cameras

GenICam-compliant cameras (GigE Vision, USB3 Vision) often expose 200+ properties via the full SFNC surface. Investigating every one is impractical. Scope the discovery by skipping infrastructure property groups that do not affect image quality:

  • Skip: Ptp*, Sequencer*, Counter*, Chunk*, Serial*, Action*, Timer*, Event*, DeviceLink*, Transport*

  • Keep: properties matching the naming heuristics table above, plus any containing Exposure, Gain, Balance, Gamma, Black, Sharp, Bright, Contrast, HDR, LUT, Bin

Report the skipped groups to the user (e.g., "Skipped 45 transport/sequencer/timing properties not relevant to image quality") so they can request deeper investigation if needed.

Safe Exploration Protocol

For properties classified as potentially quality-relevant:

  1. Read first — get current value, type, range, and read-only status via propinfo(src, propName)

  2. Record baseline — save the current value before any changes

  3. Understand constraints — if bounded, note min/max; if enum, list valid values

  4. Try a small perturbation — change by ~10% of the range (or one enum step) toward a direction that should help the diagnosed problem

  5. Capture and measure — take a new image, run diagnoseImageQuality, compare metrics

  6. Revert if no improvement — restore the saved baseline value

  7. Report to user — describe what the property appears to do based on the observed metric change

% Example: investigating an unfamiliar property
propName = "BlackLevel";
info = propinfo(src, propName);
baseline = src.(propName);
fprintf("Property: %s, Type: %s, Range: [%g %g], Current: %g\n", ...
    propName, info.Type, info.ConstraintValue(1), info.ConstraintValue(2), baseline);

% Try small increase
step = (info.ConstraintValue(2) - info.ConstraintValue(1)) * 0.1;
src.(propName) = baseline + step;
pause(0.5);
testImg = getsnapshot(vid);
testResults = diagnoseImageQuality(testImg);

% Compare and decide
src.(propName) = baseline;  % Revert
When to Involve the User

Ask the user before changing properties that:

  • Sound mode-changing or potentially destructive (TriggerMode, AcquisitionMode, PixelFormat)

  • Have the word "Reset" or "Default" in the name

  • Are enum-typed with values you don't recognize

  • Affect resolution or frame geometry (Width, Height, Binning, Decimation)

Properties to Leave Alone

Unless the user explicitly asks, do not modify:

  • TriggerMode, TriggerSource — can break acquisition entirely

  • PixelFormat — changing mid-session may require reconnecting

  • PacketSize, StreamBytesPerSecond — transport parameters, not quality

  • DeviceReset, UserSetLoad — destructive operations

Property Interaction Gotchas

  • ExposureMode=auto overrides manual Exposure: Always set mode to manual first, then adjust value

  • WhiteBalanceMode=auto overrides WhiteBalance: Same pattern — manual mode first

  • Gain amplifies noise: Increasing Gain is tempting for dark images but degrades SNR. Prefer longer Exposure when motion blur is acceptable

  • BacklightCompensation range varies wildly: Some cameras use 0–1 (on/off), others 0–255 (graduated). Always check range at runtime

  • Auto modes may take several frames to converge: After enabling auto exposure/WB, discard 5–10 frames before capturing the final image

  • Resolution changes may reset other properties: On some cameras, changing Resolution reverts Exposure/Gain to defaults

  • Preview vs snapshot: preview(cam) shows live video and triggers auto-adjustments; a cold snapshot(cam) may capture before auto-modes converge


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/test-and-measurement/matlab-enhance-camera-image · 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-enhance-camera-image.zip