Skip to content

An image processing library in C with a focus on advanced image filters for photo editing. Additionally supporting read/write of various palette file formats. Supports 125+ operations.

License

Notifications You must be signed in to change notification settings

warrengalyen/ocular

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


An image processing library implemented in pure-C

About

Ocular is a library for common and advanced image processing algorithms, without the use of any external dependencies. Suggestions for new features are welcome.

Note: RGBA byte-order is expected for all pixel data.

Documentation

The documentation of the exported functions along with examples can be found at Library Documentation.

Features

🎨 Color Adjustment Filters

Basic Adjustments

  • Brightness/Contrast
  • Exposure
  • Gamma
  • Levels
  • Histogram Stretch (contrast stretching)
  • Equalize
  • Luminance Threshold (like Photoshop Threshold)
  • Average Luminance Threshold

Color Balance & Tone

  • Color Balance
  • White Balance
  • Color Temperature
  • Vibrance
  • Saturation
  • Hue
  • HSL
  • RGB
  • Color Matrix
  • Sepia
  • Skin Tone
  • False Color (mix between two colors using luminance)
  • Monochrome
  • Grayscale
  • Color Invert
  • Highlight/Shadow/Tint
  • Levels (like Photoshop)
  • Opacity
  • Image Blending (supports 27 Photoshop modes)

Lighting Correction

  • Haze (add/remove)
  • Haze Removal (Dark Channel Prior)
  • Retinex (Multi-Scale with Color Restoration)
  • Backlight Repair (corrects extremely low or non-uniform lighting)
  • Highlight/Shadow

Specialized Color Processing

  • Lookup (Remap Colors/LUT)
  • Chroma Key (Color Key / Remove Specific Color)
  • Posterize
  • Palettize
    • from file (remaps colors to closest color in palette file with optional dithering)
    • from image (reduces unique colors using color quantization with optional dithering)

🧩 Compositing & Blending

  • Opacity
  • Image Blending (supports 27 Photoshop modes)

🧠 Automatic Enhancements

  • Auto Contrast
  • Auto Gamma Correction
  • Auto Level
  • Auto White Balance
  • Auto Threshold

Image Processing Filters

Blur/De-noise

  • Bilateral (selectively blurs preserving edges and other details)
  • Average (Mean) Blur
  • Gaussian Blur
  • Box Blur
  • Motion Blur
  • Zoom Blur
  • Median Blur
  • Radial Blur
  • Surface Blur
  • Skin Smoothing
  • BEEPS (Bi-exponential Edge-preserving Smoothing)
  • Exponential Blur
  • Guided Filter

Morphology

  • Erode/Dilate
  • Min/Max
  • High Pass

Sharpening

  • Unsharp Mask
  • Sharpen

Edge Detection

  • Canny Edge
  • Gradient Edge
  • Sobel Edge
  • Laplacian Edge (Laplacian of Gaussian)
  • Roberts Edge
  • Prewitt Edge

Stylize

  • Oil Paint
  • Frosted Glass
  • Film Grain
  • Relief (Emboss)

Pixelate

  • Mosaic
  • Pointillize
  • Color Halftone
  • Fragment
  • Crystallize

Distortion

  • Kaleidoscope
  • Pinch
  • Polar Coordinates
  • Ripple
  • Spherize
  • Twirl
  • Wave

Render

  • Clouds

OCR Pre-preprocessing

  • Despeckle (Salt & Pepper Noise Removal)
  • Deskewing

Misc

  • 2D Convolution
  • Resampling (resize) [Nearest-neighbor, bilinear, bicubic and lanzcos]
  • FFT (Fast Fourier Transform) [Low-pass, high-pass, band-pass, band-stop, custom]
  • FFT Visualization (outputs frequency domain)

General

  • Retrieve average image luminosity
  • Retrieve average color
  • Retrieve image size
  • Crop
  • Flip (Vertical/Horizontal)
  • Rotate image (bilinear and bicubic)
  • Hough transform line detection

Color Quantization

  • Median Cut, Octree

Dithering

  • Ordered Bayer (4x4 and 8x8), Atkinson, Burkes, Sierra, Sierra Two-Row, Sierra Lite, Stucki, Jarvis-Judice-Ninke, Single Neighbor, Floyd-Steinberg

Color Space Conversion

Note: These are primarly used for included filters and added on as needed basis.

  • RGB <--> YIQ
  • RGB <--> HSL
  • RGB <--> HSV
  • RGB <--> YCbCr
  • RGB <--> CMYK
  • RGB <--> CIELab

Palettes

File Extension Name Read Write
.aco Adobe Color Swatch βœ“ βœ“*
.act Adobe Color Table βœ“ βœ“
.ase Adobe Swatch Exchange βœ“
.gpl GIMP Palette βœ“ βœ“
.pal, .psppalette Paint Shop Pro Palette βœ“ βœ“
.pal Microsoft RIFF Palette βœ“ βœ“
.txt Paint.NET Palette βœ“ βœ“

NOTE: *RGB only.

Running

To compile the library, simply do the following:

cmake .
make

This will out the following 4 files:

  • static library lib\libocular.xxx
  • dynamic link library bin\ocular.dll
  • cli image demo bin\demo.exe
  • cli palette demo bin\palette.exe

Licensing

Ocular is under the MIT license.

See the LICENSE file for details.

About

An image processing library in C with a focus on advanced image filters for photo editing. Additionally supporting read/write of various palette file formats. Supports 125+ operations.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Languages