https://wiki.cuvilib.com/api.php?action=feedcontributions&user=Jawad&feedformat=atom
CUVI Wiki - User contributions [en]
2024-03-28T19:17:20Z
User contributions
MediaWiki 1.37.1
https://wiki.cuvilib.com/index.php?title=CUVI_Features&diff=1765
CUVI Features
2022-11-07T07:11:26Z
<p>Jawad: /* Color Operations */</p>
<hr />
<div>__NOTOC__<br />
CUVI SDK is an image processing kit written and developed on C-CUDA and C++ for over a period of ten years. The SDK includes 100+ image processing and computer vision functions that are plug-n-play for imaging applications in a plethora of verticals. Each function is hand crafted and highly optimized to run on CUDA supported GPUs. Many functions use our own proprietary approach to algorithms and processing to make the best out of hardware and input data.<br />
<br />
==Modules==<br />
CUVI comes in following image processing modules.<br />
# Arithmetic & Logical<!--[[Module:cuvial|Arithmetic & Logical]]--><br />
# Color Operations <!--[[Module:cuvico|Color Operations]]--><br />
# Computer Vision<!--[[Module:cuvicv|Computer Vision]]--><br />
# Data Exchange<!--[[Module:cuvide|Data Exchange]]--><br />
# Geometry Transforms<!--[[Module:cuvigt|Geometry Transforms]]--><br />
# Image Filtering<!--[[Module:cuviif|Image Filtering]]--><br />
# Image Statistics<!--[[Module:cuviis|Image Statistics]]--><br />
# Image Transforms<!--[[Module:cuviit|Image Transforms]]--><br />
# Image Codecs<br />
<br/><br />
<br />
==Function List==<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|- valign="top"<br />
|<br />
===Arithmetic & Logical===<br />
# [[Function:Abs|abs]] - Computes absolute value of each image pixel<br />
# [[Function:AbsDiff|absDiff]] - Computes absolute difference between 2 images.<br />
# [[Function:Add|add]] - Adds two images<br />
# [[Function:AND|AND]] - Bitwise AND operation between two images.<br />
# [[Function:Cbrt|cbrt]] - Computes cube root of each image pixel<br />
# [[Function:Ceil|ceil]] - Applies ceil function to each image pixel<br />
# [[Function:Divide|divide]] - Divides pixel values of two images<br />
# [[Function:dot|dot]]<br />
# [[Function:Exp|exp]] - Computes exponential of each image pixel<br />
# [[Function:Floor|floor]] - Applies floor function to each image pixel<br />
# [[Function:InRange|inRange]] - Checks if image pixels lie between a range of values<br />
# [[Function:Invert|invert]] - Computes matrix inverse using LU factorization<br />
# [[Function:MatMul|matMul]] - Performs matrix multiplication<br />
# [[Function:MatMulTrans|matMulTrans]] - Performs matrix multiplication with its transpose<br />
# [[Function:Multiply|multiply]] - Multiplies pixel values of two images<br />
# [[Function:NOT|NOT]] - Inverts the bits of each pixel.<br />
# [[Function:OR|OR]] - Bitwise OR operation between two images.<br />
# [[Function:Pow|pow]] - Raise each pixel to a specified power.<br />
# [[Function:Round|round]] - Rounds each pixel to nearest integer value.<br />
# [[Function:SHL|SHL]] - Left shift each pixel of an image.<br />
# [[Function:SHR|SHR]] - Right shift each pixel of an image<br />
# [[Function:Sqrt|sqrt]] - Takes square root of each pixel of an image.<br />
# [[Function:Subtract|subtract]] - Subtracts pixel values of two images.<br />
# [[Function:XOR|XOR]] - Logical bitwise XOR operation between two images.<br />
<br />
===Color Operations===<br />
# [[Function:Adjust|adjust]] - Equivalent to MATLAB's imadjust<br />
# [[Function:AutoColor|autoColor]] - Fixes false colors at pixel level using a propriety approach<br />
# [[Function:BorderMask|borderMask]] - Masks image borders with custom intensity<br />
# [[Function:blackGammaLUT|blackGammaLUT]] - Remaps image values according to 3 look up tables<br />
# [[Function:ChannelMix|channelMix]] - Applies a color twist matrix to an image<br />
# [[Function:ChannelMerge|channelMerge]] - Merges R, G and B Channel to form a color image<br />
# [[Function:ChannelSplit|channelSplit]] - Splits a three channel image into R, G and B channels<br />
# [[Function:ColorPick|colorPick]] - Performs color segmentation of image by selecting a single color<br />
# [[Function:Dehaze|dehaze]] - Makes sense of images taken in a blizzard<br />
# [[Function:Demosaic|demosaic]] - Restores an RGB image from a CFA Bayer image<br />
# [[Function:DemosaicDFPD|demosaicDFPD]] - Restores an RGB image from a CFA Bayer image using DFPD algorithm<br />
# [[Function:fpn|fpn]] - fixed point noise remove via camera black image<br />
# [[Function:FPNCorrection|FPNCorrection]] - fixed point noise removal via black and white images and gain<br />
# [[Function:GammaCorrect|gammaCorrect]] - Performs gamma correction of an image<br />
# [[Function:Gray2rgb|gray2rgb]] - Copy a grayscale image to each channel of an RGB image.<br />
# [[Function:HistEq|histEq]] - Performs histogram equalization<br />
# [[Function:Hsv2rgb|hsv2rgb]] - Converts image from HSV color space to RGB.<br />
# [[Function:ImageBinary|imageBinary]] - Converts input image into a binary image based on threshold<br />
# [[Function:Lab2rgb|Lab2rgb]] - Converts image from CIE Lab color space to RGB.<br />
# [[Function:LogTransform|logTransform]] - Applies log transformation for contrast enhancement of an image<br />
# [[Function:Lowlight|lowlight]] - enhances the low intensity colors in a dark photo<br />
# [[Function:LUT|LUT]] - Remaps image values according to look up table<br />
# [[Function:RGB2Gray|rgb2gray]] - Converts an RGB image to gray scale<br />
# [[Function:Rgb2hsv|rgb2hsv]] - Converts an RGB image to HSV color space<br />
# [[Function:Rgb2Lab|rgb2Lab]] - Converts an RGB image to CIE Lab color space<br />
# [[Function:Rgb2ycbcr|rgb2ycbcr]] - Converts an RGB image to YCbCr color space<br />
# [[Function:RGB2YUV|rgb2yuv]] - Converts RGB image to YUV color space<br />
# [[Function:Ycbcr2rgb|ycbcr2rgb]] - Converts YCbCr image to an RGB image<br />
# [[Function:YUV2RGB|yuv2rgb]] - Converts YUV image to an RGB image.<br />
# [[Function:YUV422TOV210|YUV422TOV210]] - Converts YUV422 image to an V210 image.<br />
# [[Function:YUV444TOV210|YUV444TOV210]] - Converts YUV444 image to an V210 image.<br />
# [[Function:V210TOYUV444|V210TOYUV444]] - Converts V210 image to an YUV444 image.<br />
<br />
===Computer Vision===<br />
# [[Function:EigenValsVecs|eigenValsVecs]] - Calculates eigen values and eigen vectors at each pixel in an image<br />
# [[Function:findTransformECC|findTransformECC]] - Calculates geometric transform between two images in terms of the ECC criterion<br />
# [[Function:GoodFeaturesToTrack|goodFeaturesToTrack]] - selects N best points on a image using KLT or Harris<br />
# [[Function:MinEigenVal|minEigenVal]] - Calculates the minimum eigen value at each pixel in an image<br />
# [[Function:OpticalFlowHS|opticalFlowHS]] - Calculates flow of each image pixel in two frames using Horn–Schunck method<br />
# [[Function:opticalFlowPyrLKDense|opticalFlowPyrLKDense]] - Calculates flow of each image pixel in two frames using pyramidal Lucas–Kanade method<br />
# [[Function:TrackFeatures|trackFeatures]] - Tracks input features from frame 1 onto frame 2 using KLT method<br />
# [[Function:FocusStack|focusStack]] - Stacks multiples photos with various focus into a single all focused image<br />
<br />
===Data Exchange===<br />
# [[Function:BitConversion|bitConversion]] - Converts image pixel values from one data type to another.<br />
# [[Function:ConvertScale|convertScale]] - Converts image data type with optional scaling.<br />
# [[Function:GenerateRandomImage|generateRandomImage]] - Creates a new random image.<br />
# [[Function:GetChannel|getChannel]] - Extracts a channel of an image.<br />
# [[Function:PadImage|padImage]] - Pads any side of the image with the value specified.<br />
# [[Function:Rectangle|rectangle]] - Draws a rectangle on the specified region of an image.<br />
# [[Function:Threshold|threshold]] - Clamps image pixel values between specified thresholds.<br />
<br />
===Geometry Transforms===<br />
# [[Function:Crop|crop]] - Crops the desired portion of an image<br />
# [[Function:Flip|flipImage]] - Mirrors an image about a horizontal or vertical axis, or both<br />
# [[Function:Resize|resize]] - Resizes input image using specified interpolation<br />
# [[Function:Rotate|rotate]] - Rotates an image about specified anchor<br />
# [[Function:RotateNoCrop|RotateNoCrop]] - Rotates an image about specified anchor<br />
# [[Function:Taper|taper]] - Smartly extends image border<br />
# [[Function:Transpose|transpose]] - Takes Transpose of the image<br />
# [[Function:WarpAffine|warpAffine]] - Applies an affine transformation to an image.<br />
# [[Function:WarpAffineBack|warpAffineBack]] - Applies an inverse affine transformation to an image.<br />
# [[Function:WarpPerspective|warpPerspective]] - Applies an affine transformation to an image.<br />
# [[Function:WarpPerspectiveBack|warpPerspectiveBack]] - Applies an inverse affine transformation to an image.<br />
<br />
===Image Filtering===<br />
# [[Function:ImageFilter|imageFilter]] - Performs linear 1D and 2D image filtering<br />
# [[Function:ImageGradients|imageGradients]] - Calculates X and Y gradients of image<br />
# [[Function:MinFilter|minFilter]] - Filters an image using a min filter<br />
# [[Function:MaxFilter|maxFilter]] - Filters an image using a max filter<br />
# [[Function:MedianFilter|medianFilter]] - Applies 2D median filter on an image<br />
# [[Function:UnderwaterFilter|underwaterFilter]] - Brings out original colors of underwater photography.<br />
<br />
===Image Statistics===<br />
# [[Function:CalcHist|calcHist]] - Computes the histogram of an 8 bit image.<br />
# [[Function:CountInRange|countInRange]] - Counts the number of pixels within the given intensity range<br />
# [[Function:Max|max]] - Computes the maximum of image pixel values<br />
# [[Function:Mean|mean]] - Computes the mean of image pixel values<br />
# [[Function:MeanStdDev|meanStdDev]] - Computes the mean and standard deviation of image pixel values<br />
# [[Function:Min|min]] - Computes the minimum of image pixel values<br />
# [[Function:MinMax|minMax]] - Computes the minimum and maximum of image pixel values<br />
# [[Function:Sum|sum]] - Computes the sum of image pixel values<br />
<br />
===Image Transforms===<br />
# [[Function:Fft2|fft2]] - Computes the 2D Fast Fourier Transform of an image.<br />
# [[Function:FftGetProperty|fftGetProperty]] - Gets magnitude, phase, real and imaginary part of an FFT image with optional scaling.<br />
# [[Function:FftShift|fftShift]] - Moves low frequency components to the center of an FFT image.<br />
# [[Function:haarFwd|haarFwd]] - Performs one-level wavelet decomposition of an image using haar basis<br />
# [[Function:haarInv|haarInv]] - Performs one-level haar wavelet reconstruction of an image<br />
<br />
===Image Codecs===<br />
# [[Function:Encode|encode]] - Encodes image pixel array into JPEG.<br />
# [[Function:Decode|decode]] - Decodes a JPEG into an image pixel array.<br />
<br />
<!--===Video Stabilization===<br />
* [[Function:CuviMotionEstimator|CuviMotionEstimator]] - Class to estimate global motion vectors between an image pair.<br />
* [[Function:CuviVideoStabilizer|CuviVideoStabilizer]] - Class for transparent video stabilization of a video file.--><br />
|}<br />
<br/><br />
<!-- CUVI Core Starts --><br />
<br />
==CUVI Core==<br />
CUVI Core includes the following helper functionality:<br />
<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|style="width:100%;"|<br />
===CuviImage===<br />
A C++ class to hold image data on the device. It has the following methods<br />
* CuviImage(); - default constructor<br />
* CuviImage(CuviSize size, Cuvi32s depth, Cuvi32s channels) - Main Constructor. throws exception in case of failure<br />
* CuviImage(const CuviImage&) - copy constructor<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch) - Copy image data from host to device.<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch, const CuviStream& stream) - Asynchronously copy image data from host to device.<br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin) - Copy a chunk of image data from host to device. <br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin, const CuviStream& stream) - Asynchronously copy a chunk of image data from host to device. <br />
* download(void* pDstHost, const Cuvi32s dstPitch) - Copy image data from device to host<br />
* download(void* pDstHost, const Cuvi32s dstPitch, const CuviStream& stream) - Asynchronously copy image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI) - Copy a chunk of image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI, const CuviStream& stream) - Asynchronously copy a chunk of image data from device to host<br />
* copyTo(CuviImage& dst, CuviPoint2D<int> dstOrigin, CuviRect srcROI, const CuviStream& stream = CuviStream()) - Copy image data (or an ROI of it) from one Cuvi Image to another.<br />
* show(const std::string& title = "CUVI Image", Cuvi32s milliseconds = 0) - Render device image directly on the screen<br />
* ~CuviImage() - Destructor. Frees Device Memory. throws exception in case of failure<br />
<br />
{|<br />
|-valign="top"<br />
|style="width:50%;"|<br />
<br />
===Timer===<br />
CUVI provides a C++ Timer class that accurately profiles your application timing<br />
* Start() - Starts the timer.<br />
* Stop() - Stops the timer<br />
* Reset() - Resets the timer<br />
* GetElapsedTime() - Returns the elapsed time between Start and Stop calls in seconds<br />
|style="width:50%; "|<br />
<br />
===DeviceProperties===<br />
CuviDeviceProperties holds all the important properties of underlying CUDA device. Device management functions are present inside the namespace cuvi::device.<br />
*Cuvi32s getDeviceCount() - Gives the count of devices installed in the machine<br />
*Cuvi32s getCurentDevice() - Returns the ID of selected graphics card<br />
*CuviStatus setCurrentDevice(const Cuvi32s ID) - Makes any device an active device<br />
*CuviStatus getDeviceProperties(const Cuvi32s deviceID, CuviDeviceProperties& props) - Returns all the important properties of desired GPU<br />
|}<br />
|}<br />
<!-- CUVI Core Ends--></div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:V210TOYUV444&diff=1764
Function:V210TOYUV444
2022-11-07T07:10:26Z
<p>Jawad: Created page with "__NOTOC__ V210 to YUV444 converter"</p>
<hr />
<div>__NOTOC__<br />
V210 to YUV444 converter</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:YUV444TOV210&diff=1763
Function:YUV444TOV210
2022-11-07T07:10:06Z
<p>Jawad: Created page with "__NOTOC__ YUV444 to V210 converter"</p>
<hr />
<div>__NOTOC__<br />
YUV444 to V210 converter</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:YUV422TOV210&diff=1762
Function:YUV422TOV210
2022-11-07T07:09:50Z
<p>Jawad: Created page with "__NOTOC__ YUV422 to V210 converter"</p>
<hr />
<div>__NOTOC__<br />
YUV422 to V210 converter</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:Add&diff=1761
Function:Add
2022-11-07T07:09:25Z
<p>Jawad: /* Parameters */</p>
<hr />
<div>__NOTOC__<br />
Adds two images or adds a constant to each pixel of the image.<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
CuviStatus add(const CuviImage& src1,<br />
const CuviImage& src2,<br />
CuviImage& dst,<br />
const CuviStream& stream = CuviStream());<br />
<br />
CuviStatus add(const CuviImage& src,<br />
const CuviScalar& values,<br />
CuviImage& dst,<br />
const CuviStream& stream = CuviStream());<br />
<br />
CuviStatus add(const CuviImage& src,<br />
const Cuvi64f value,<br />
CuviImage& dst,<br />
const CuviStream& stream = CuviStream());<br />
<br />
</syntaxhighlight><br />
|}<br />
<br />
__NOTOC__<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src1<br />
| CuviImage&<br />
| First Input Image<br />
|-<br />
| src2<br />
| CuviImage&<br />
| Second Input Image<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
===Image Type Support===<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Input 1<br />
! Input 2<br />
! Output<br />
|-<br />
| 8u<br />
| 8u<br />
| 8u<br />
|-<br />
| 16u<br />
| 16u<br />
| 16u<br />
|-<br />
| 32f<br />
| 32f<br />
| 32f<br />
|-<br />
| 8u<br />
| 8u<br />
| 16u<br />
|-<br />
| 8u<br />
| 8u<br />
| 32f<br />
|-<br />
| 16u<br />
| 16u<br />
| 32f<br />
|}<br />
|}<br />
<br />
====Sample====<br />
[[File:Addin1.jpg|none|frame|First Input Image]]<br />
<br/><br />
[[File:Addin2.jpg|none|frame|Second Input Image]]<br />
<br/><br />
[[File:AddOut.jpg|none|frame|Resultant Image]]<br />
<br/><br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage gimg1 = cuvi::io::loadImage(path);<br />
CuviImage gimg2 = cuvi::io::loadImage(path);<br />
CuviImage gout;<br />
<br />
//Add <br />
cuvi::arithmeticLogical::add(gimg1,gimg2,gout);<br />
<br />
//The same can be achieved by using arithmetic operators<br />
gout = gimg1 + gimg2;<br />
<br />
//Add a constant value to each pixel of the image<br />
gimg1 += 10;<br />
<br />
//Add a different value to each channel<br />
gimg2 += CuviScalar(5,10,3);<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:FPNCorrection&diff=1760
Function:FPNCorrection
2022-11-07T07:08:01Z
<p>Jawad: Created page with "__NOTOC__ Removes fixed point camera noise from the image using a more robust method than Function:fpn. In addition to black image, the function also takes a white image and gain value to remove noise from the input image using the internal formula: ''dst[i] = Saturate(gain * (src[i]- black[i])/(white[i] - black[i]),0,maxValue)''; ====Function==== {| |style="font-size:100%;"| <syntaxhighlight lang="cpp"> CuviStatus FPNCorrection(const CuviImage& src,..."</p>
<hr />
<div>__NOTOC__<br />
Removes fixed point camera noise from the image using a more robust method than [[Function:fpn]]. In addition to black image, the function also takes a white image and gain value to remove noise from the input image using the internal formula: ''dst[i] = Saturate(gain * (src[i]- black[i])/(white[i] - black[i]),0,maxValue)'';<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
CuviStatus FPNCorrection(const CuviImage& src,<br />
CuviImage& dst,<br />
const CuviImage& white, <br />
const CuviImage& black, <br />
Cuvi32f gain,<br />
const CuviStream& stream)<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src<br />
| CuviImage&<br />
| Source Image with noise<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image with no noise<br />
|-<br />
| white<br />
| CuviImage&<br />
| White image from camera<br />
|-<br />
| black<br />
| CuviImage&<br />
| Black image from camera with closed shutter<br />
|-<br />
| gain<br />
| Cuvi32f<br />
| Gain value for white correction<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
===Image Type Support===<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! output<br />
! input<br />
! blackImage<br />
|-<br />
| 8uC1<br />
| 8uC1<br />
| 8uC1<br />
|-<br />
| 16uC1<br />
| 16uC1<br />
| 16uC1<br />
|-<br />
| 8uC3<br />
| 8uC3<br />
| 8uC3<br />
|-<br />
| 16uC3<br />
| 16uC3<br />
| 16uC3<br />
|}<br />
|}<br />
<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage src= cuvi::io::loadImage(path);<br />
CuviImage black= cuvi::io::loadImage(path);<br />
CuviImage white= cuvi::io::loadImage(path);<br />
CuviImage src;<br />
Cuvi32f gain = 1.15f;<br />
<br />
//fpn<br />
cuvi::colorOperations::FPNCorrection(const CuviImage& src,<br />
CuviImage& dst,<br />
const CuviImage& white,<br />
const CuviImage& black, <br />
Cuvi32f gain)<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=CUVI_Features&diff=1759
CUVI Features
2022-11-07T06:59:50Z
<p>Jawad: /* Color Operations */</p>
<hr />
<div>__NOTOC__<br />
CUVI SDK is an image processing kit written and developed on C-CUDA and C++ for over a period of ten years. The SDK includes 100+ image processing and computer vision functions that are plug-n-play for imaging applications in a plethora of verticals. Each function is hand crafted and highly optimized to run on CUDA supported GPUs. Many functions use our own proprietary approach to algorithms and processing to make the best out of hardware and input data.<br />
<br />
==Modules==<br />
CUVI comes in following image processing modules.<br />
# Arithmetic & Logical<!--[[Module:cuvial|Arithmetic & Logical]]--><br />
# Color Operations <!--[[Module:cuvico|Color Operations]]--><br />
# Computer Vision<!--[[Module:cuvicv|Computer Vision]]--><br />
# Data Exchange<!--[[Module:cuvide|Data Exchange]]--><br />
# Geometry Transforms<!--[[Module:cuvigt|Geometry Transforms]]--><br />
# Image Filtering<!--[[Module:cuviif|Image Filtering]]--><br />
# Image Statistics<!--[[Module:cuviis|Image Statistics]]--><br />
# Image Transforms<!--[[Module:cuviit|Image Transforms]]--><br />
# Image Codecs<br />
<br/><br />
<br />
==Function List==<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|- valign="top"<br />
|<br />
===Arithmetic & Logical===<br />
# [[Function:Abs|abs]] - Computes absolute value of each image pixel<br />
# [[Function:AbsDiff|absDiff]] - Computes absolute difference between 2 images.<br />
# [[Function:Add|add]] - Adds two images<br />
# [[Function:AND|AND]] - Bitwise AND operation between two images.<br />
# [[Function:Cbrt|cbrt]] - Computes cube root of each image pixel<br />
# [[Function:Ceil|ceil]] - Applies ceil function to each image pixel<br />
# [[Function:Divide|divide]] - Divides pixel values of two images<br />
# [[Function:dot|dot]]<br />
# [[Function:Exp|exp]] - Computes exponential of each image pixel<br />
# [[Function:Floor|floor]] - Applies floor function to each image pixel<br />
# [[Function:InRange|inRange]] - Checks if image pixels lie between a range of values<br />
# [[Function:Invert|invert]] - Computes matrix inverse using LU factorization<br />
# [[Function:MatMul|matMul]] - Performs matrix multiplication<br />
# [[Function:MatMulTrans|matMulTrans]] - Performs matrix multiplication with its transpose<br />
# [[Function:Multiply|multiply]] - Multiplies pixel values of two images<br />
# [[Function:NOT|NOT]] - Inverts the bits of each pixel.<br />
# [[Function:OR|OR]] - Bitwise OR operation between two images.<br />
# [[Function:Pow|pow]] - Raise each pixel to a specified power.<br />
# [[Function:Round|round]] - Rounds each pixel to nearest integer value.<br />
# [[Function:SHL|SHL]] - Left shift each pixel of an image.<br />
# [[Function:SHR|SHR]] - Right shift each pixel of an image<br />
# [[Function:Sqrt|sqrt]] - Takes square root of each pixel of an image.<br />
# [[Function:Subtract|subtract]] - Subtracts pixel values of two images.<br />
# [[Function:XOR|XOR]] - Logical bitwise XOR operation between two images.<br />
<br />
===Color Operations===<br />
# [[Function:Adjust|adjust]] - Equivalent to MATLAB's imadjust<br />
# [[Function:AutoColor|autoColor]] - Fixes false colors at pixel level using a propriety approach<br />
# [[Function:BorderMask|borderMask]] - Masks image borders with custom intensity<br />
# [[Function:blackGammaLUT|blackGammaLUT]] - Remaps image values according to 3 look up tables<br />
# [[Function:ChannelMix|channelMix]] - Applies a color twist matrix to an image<br />
# [[Function:ChannelMerge|channelMerge]] - Merges R, G and B Channel to form a color image<br />
# [[Function:ChannelSplit|channelSplit]] - Splits a three channel image into R, G and B channels<br />
# [[Function:ColorPick|colorPick]] - Performs color segmentation of image by selecting a single color<br />
# [[Function:Dehaze|dehaze]] - Makes sense of images taken in a blizzard<br />
# [[Function:Demosaic|demosaic]] - Restores an RGB image from a CFA Bayer image<br />
# [[Function:DemosaicDFPD|demosaicDFPD]] - Restores an RGB image from a CFA Bayer image using DFPD algorithm<br />
# [[Function:fpn|fpn]] - fixed point noise remove via camera black image<br />
# [[Function:FPNCorrection|FPNCorrection]] - fixed point noise removal via black and white images and gain<br />
# [[Function:GammaCorrect|gammaCorrect]] - Performs gamma correction of an image<br />
# [[Function:Gray2rgb|gray2rgb]] - Copy a grayscale image to each channel of an RGB image.<br />
# [[Function:HistEq|histEq]] - Performs histogram equalization<br />
# [[Function:Hsv2rgb|hsv2rgb]] - Converts image from HSV color space to RGB.<br />
# [[Function:ImageBinary|imageBinary]] - Converts input image into a binary image based on threshold<br />
# [[Function:Lab2rgb|Lab2rgb]] - Converts image from CIE Lab color space to RGB.<br />
# [[Function:LogTransform|logTransform]] - Applies log transformation for contrast enhancement of an image<br />
# [[Function:Lowlight|lowlight]] - enhances the low intensity colors in a dark photo<br />
# [[Function:LUT|LUT]] - Remaps image values according to look up table<br />
# [[Function:RGB2Gray|rgb2gray]] - Converts an RGB image to gray scale<br />
# [[Function:Rgb2hsv|rgb2hsv]] - Converts an RGB image to HSV color space<br />
# [[Function:Rgb2Lab|rgb2Lab]] - Converts an RGB image to CIE Lab color space<br />
# [[Function:Rgb2ycbcr|rgb2ycbcr]] - Converts an RGB image to YCbCr color space<br />
# [[Function:RGB2YUV|rgb2yuv]] - Converts RGB image to YUV color space<br />
# [[Function:Ycbcr2rgb|ycbcr2rgb]] - Converts YCbCr image to an RGB image<br />
# [[Function:YUV2RGB|yuv2rgb]] - Converts YUV image to an RGB image.<br />
# [[Function:YUV422TOV210|YUV422TOV210]]<br />
# [[Function:YUV444TOV210|YUV444TOV210]]<br />
# [[Function:V210TOYUV444|V210TOYUV444]]<br />
<br />
===Computer Vision===<br />
# [[Function:EigenValsVecs|eigenValsVecs]] - Calculates eigen values and eigen vectors at each pixel in an image<br />
# [[Function:findTransformECC|findTransformECC]] - Calculates geometric transform between two images in terms of the ECC criterion<br />
# [[Function:GoodFeaturesToTrack|goodFeaturesToTrack]] - selects N best points on a image using KLT or Harris<br />
# [[Function:MinEigenVal|minEigenVal]] - Calculates the minimum eigen value at each pixel in an image<br />
# [[Function:OpticalFlowHS|opticalFlowHS]] - Calculates flow of each image pixel in two frames using Horn–Schunck method<br />
# [[Function:opticalFlowPyrLKDense|opticalFlowPyrLKDense]] - Calculates flow of each image pixel in two frames using pyramidal Lucas–Kanade method<br />
# [[Function:TrackFeatures|trackFeatures]] - Tracks input features from frame 1 onto frame 2 using KLT method<br />
# [[Function:FocusStack|focusStack]] - Stacks multiples photos with various focus into a single all focused image<br />
<br />
===Data Exchange===<br />
# [[Function:BitConversion|bitConversion]] - Converts image pixel values from one data type to another.<br />
# [[Function:ConvertScale|convertScale]] - Converts image data type with optional scaling.<br />
# [[Function:GenerateRandomImage|generateRandomImage]] - Creates a new random image.<br />
# [[Function:GetChannel|getChannel]] - Extracts a channel of an image.<br />
# [[Function:PadImage|padImage]] - Pads any side of the image with the value specified.<br />
# [[Function:Rectangle|rectangle]] - Draws a rectangle on the specified region of an image.<br />
# [[Function:Threshold|threshold]] - Clamps image pixel values between specified thresholds.<br />
<br />
===Geometry Transforms===<br />
# [[Function:Crop|crop]] - Crops the desired portion of an image<br />
# [[Function:Flip|flipImage]] - Mirrors an image about a horizontal or vertical axis, or both<br />
# [[Function:Resize|resize]] - Resizes input image using specified interpolation<br />
# [[Function:Rotate|rotate]] - Rotates an image about specified anchor<br />
# [[Function:RotateNoCrop|RotateNoCrop]] - Rotates an image about specified anchor<br />
# [[Function:Taper|taper]] - Smartly extends image border<br />
# [[Function:Transpose|transpose]] - Takes Transpose of the image<br />
# [[Function:WarpAffine|warpAffine]] - Applies an affine transformation to an image.<br />
# [[Function:WarpAffineBack|warpAffineBack]] - Applies an inverse affine transformation to an image.<br />
# [[Function:WarpPerspective|warpPerspective]] - Applies an affine transformation to an image.<br />
# [[Function:WarpPerspectiveBack|warpPerspectiveBack]] - Applies an inverse affine transformation to an image.<br />
<br />
===Image Filtering===<br />
# [[Function:ImageFilter|imageFilter]] - Performs linear 1D and 2D image filtering<br />
# [[Function:ImageGradients|imageGradients]] - Calculates X and Y gradients of image<br />
# [[Function:MinFilter|minFilter]] - Filters an image using a min filter<br />
# [[Function:MaxFilter|maxFilter]] - Filters an image using a max filter<br />
# [[Function:MedianFilter|medianFilter]] - Applies 2D median filter on an image<br />
# [[Function:UnderwaterFilter|underwaterFilter]] - Brings out original colors of underwater photography.<br />
<br />
===Image Statistics===<br />
# [[Function:CalcHist|calcHist]] - Computes the histogram of an 8 bit image.<br />
# [[Function:CountInRange|countInRange]] - Counts the number of pixels within the given intensity range<br />
# [[Function:Max|max]] - Computes the maximum of image pixel values<br />
# [[Function:Mean|mean]] - Computes the mean of image pixel values<br />
# [[Function:MeanStdDev|meanStdDev]] - Computes the mean and standard deviation of image pixel values<br />
# [[Function:Min|min]] - Computes the minimum of image pixel values<br />
# [[Function:MinMax|minMax]] - Computes the minimum and maximum of image pixel values<br />
# [[Function:Sum|sum]] - Computes the sum of image pixel values<br />
<br />
===Image Transforms===<br />
# [[Function:Fft2|fft2]] - Computes the 2D Fast Fourier Transform of an image.<br />
# [[Function:FftGetProperty|fftGetProperty]] - Gets magnitude, phase, real and imaginary part of an FFT image with optional scaling.<br />
# [[Function:FftShift|fftShift]] - Moves low frequency components to the center of an FFT image.<br />
# [[Function:haarFwd|haarFwd]] - Performs one-level wavelet decomposition of an image using haar basis<br />
# [[Function:haarInv|haarInv]] - Performs one-level haar wavelet reconstruction of an image<br />
<br />
===Image Codecs===<br />
# [[Function:Encode|encode]] - Encodes image pixel array into JPEG.<br />
# [[Function:Decode|decode]] - Decodes a JPEG into an image pixel array.<br />
<br />
<!--===Video Stabilization===<br />
* [[Function:CuviMotionEstimator|CuviMotionEstimator]] - Class to estimate global motion vectors between an image pair.<br />
* [[Function:CuviVideoStabilizer|CuviVideoStabilizer]] - Class for transparent video stabilization of a video file.--><br />
|}<br />
<br/><br />
<!-- CUVI Core Starts --><br />
<br />
==CUVI Core==<br />
CUVI Core includes the following helper functionality:<br />
<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|style="width:100%;"|<br />
===CuviImage===<br />
A C++ class to hold image data on the device. It has the following methods<br />
* CuviImage(); - default constructor<br />
* CuviImage(CuviSize size, Cuvi32s depth, Cuvi32s channels) - Main Constructor. throws exception in case of failure<br />
* CuviImage(const CuviImage&) - copy constructor<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch) - Copy image data from host to device.<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch, const CuviStream& stream) - Asynchronously copy image data from host to device.<br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin) - Copy a chunk of image data from host to device. <br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin, const CuviStream& stream) - Asynchronously copy a chunk of image data from host to device. <br />
* download(void* pDstHost, const Cuvi32s dstPitch) - Copy image data from device to host<br />
* download(void* pDstHost, const Cuvi32s dstPitch, const CuviStream& stream) - Asynchronously copy image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI) - Copy a chunk of image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI, const CuviStream& stream) - Asynchronously copy a chunk of image data from device to host<br />
* copyTo(CuviImage& dst, CuviPoint2D<int> dstOrigin, CuviRect srcROI, const CuviStream& stream = CuviStream()) - Copy image data (or an ROI of it) from one Cuvi Image to another.<br />
* show(const std::string& title = "CUVI Image", Cuvi32s milliseconds = 0) - Render device image directly on the screen<br />
* ~CuviImage() - Destructor. Frees Device Memory. throws exception in case of failure<br />
<br />
{|<br />
|-valign="top"<br />
|style="width:50%;"|<br />
<br />
===Timer===<br />
CUVI provides a C++ Timer class that accurately profiles your application timing<br />
* Start() - Starts the timer.<br />
* Stop() - Stops the timer<br />
* Reset() - Resets the timer<br />
* GetElapsedTime() - Returns the elapsed time between Start and Stop calls in seconds<br />
|style="width:50%; "|<br />
<br />
===DeviceProperties===<br />
CuviDeviceProperties holds all the important properties of underlying CUDA device. Device management functions are present inside the namespace cuvi::device.<br />
*Cuvi32s getDeviceCount() - Gives the count of devices installed in the machine<br />
*Cuvi32s getCurentDevice() - Returns the ID of selected graphics card<br />
*CuviStatus setCurrentDevice(const Cuvi32s ID) - Makes any device an active device<br />
*CuviStatus getDeviceProperties(const Cuvi32s deviceID, CuviDeviceProperties& props) - Returns all the important properties of desired GPU<br />
|}<br />
|}<br />
<!-- CUVI Core Ends--></div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:Fpn&diff=1758
Function:Fpn
2022-11-07T06:58:35Z
<p>Jawad: </p>
<hr />
<div>__NOTOC__<br />
Removes fixed point camera noise from the image using black image. Ideally the black image taken from camera with closed shutter should be all 0s. Any value above that is considered a black noise and can be removed via the formula: ''outputImage[i] = max(0, inputImage[i] - blackImage[i])'';<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
CuviStatus fpn(CuviImage &output,<br />
const CuviImage &input,<br />
const CuviImage &blackImage)<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| output<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| input<br />
| CuviImage&<br />
| Source Image<br />
|-<br />
| blackImage<br />
| CuviImage&<br />
| Black image from camera with closed shutter<br />
|}<br />
|}<br />
<br />
===Image Type Support===<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! output<br />
! input<br />
! blackImage<br />
|-<br />
| 8uC1<br />
| 8uC1<br />
| 8uC1<br />
|-<br />
| 16uC1<br />
| 16uC1<br />
| 16uC1<br />
|-<br />
| 8uC3<br />
| 8uC3<br />
| 8uC3<br />
|-<br />
| 16uC3<br />
| 16uC3<br />
| 16uC3<br />
|}<br />
|}<br />
<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path);<br />
CuviImage blackImage= cuvi::io::loadImage(path);<br />
CuviImage output;<br />
<br />
//fpn<br />
cuvi::colorOperations::fpn(output, input, blackImage);<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:Fpn&diff=1757
Function:Fpn
2022-11-07T06:58:10Z
<p>Jawad: Created page with "__NOTOC__ Removes fixed point camera noise from the image using black image. Ideally the black image taken from camera with closed shutter should be all 0s. Any value above that is considered a black noise and can be removed via the formula: outputImage[i] = max(0, inputImage[i] - blackImage[i]); ====Function==== {| |style="font-size:100%;"| <syntaxhighlight lang="cpp"> CuviStatus fpn(CuviImage &output, const CuviImage &input, const CuviImag..."</p>
<hr />
<div>__NOTOC__<br />
Removes fixed point camera noise from the image using black image. Ideally the black image taken from camera with closed shutter should be all 0s. Any value above that is considered a black noise and can be removed via the formula: outputImage[i] = max(0, inputImage[i] - blackImage[i]);<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
CuviStatus fpn(CuviImage &output,<br />
const CuviImage &input,<br />
const CuviImage &blackImage)<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| output<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| input<br />
| CuviImage&<br />
| Source Image<br />
|-<br />
| blackImage<br />
| CuviImage&<br />
| Black image from camera with closed shutter<br />
|}<br />
|}<br />
<br />
===Image Type Support===<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! output<br />
! input<br />
! blackImage<br />
|-<br />
| 8uC1<br />
| 8uC1<br />
| 8uC1<br />
|-<br />
| 16uC1<br />
| 16uC1<br />
| 16uC1<br />
|-<br />
| 8uC3<br />
| 8uC3<br />
| 8uC3<br />
|-<br />
| 16uC3<br />
| 16uC3<br />
| 16uC3<br />
|}<br />
|}<br />
<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path);<br />
CuviImage blackImage= cuvi::io::loadImage(path);<br />
CuviImage output;<br />
<br />
//fpn<br />
cuvi::colorOperations::fpn(output, input, blackImage);<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:Dot&diff=1756
Function:Dot
2022-10-31T11:26:45Z
<p>Jawad: Created page with "__NOTOC__ Computes the dot product of two 2D images and stores into a 1D scalar. ====Function==== {| |style="font-size:100%;"| <syntaxhighlight lang="cpp"> CuviStatus cuvi::arithmeticLogical::dot(CuviImage& src1, CuviImage& src2, CuviScalar& result, const CuviStream& stream = CuviStream()); </syntaxhighlight> |} ====Parameters==== {| |style="font-size..."</p>
<hr />
<div>__NOTOC__<br />
Computes the dot product of two 2D images and stores into a 1D scalar.<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
CuviStatus cuvi::arithmeticLogical::dot(CuviImage& src1, <br />
CuviImage& src2,<br />
CuviScalar& result,<br />
const CuviStream& stream = CuviStream());<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name<br />
! Type <br />
! Description<br />
|-<br />
| src1<br />
| CuviImage&<br />
| image 1<br />
|-<br />
| src2<br />
| CuviImage&<br />
| image 2<br />
|-<br />
| result<br />
| CuviScalar&<br />
| result of dot product<br />
|-<br />
| stream<br />
| const CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
====Image Type Support====<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Type<br />
|-<br />
| 32FC1<br />
|-<br />
| 32FC3<br />
|}<br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=CUVI_Features&diff=1755
CUVI Features
2022-10-31T08:48:25Z
<p>Jawad: /* Arithmetic & Logical */</p>
<hr />
<div>__NOTOC__<br />
CUVI SDK is an image processing kit written and developed on C-CUDA and C++ for over a period of ten years. The SDK includes 100+ image processing and computer vision functions that are plug-n-play for imaging applications in a plethora of verticals. Each function is hand crafted and highly optimized to run on CUDA supported GPUs. Many functions use our own proprietary approach to algorithms and processing to make the best out of hardware and input data.<br />
<br />
==Modules==<br />
CUVI comes in following image processing modules.<br />
# Arithmetic & Logical<!--[[Module:cuvial|Arithmetic & Logical]]--><br />
# Color Operations <!--[[Module:cuvico|Color Operations]]--><br />
# Computer Vision<!--[[Module:cuvicv|Computer Vision]]--><br />
# Data Exchange<!--[[Module:cuvide|Data Exchange]]--><br />
# Geometry Transforms<!--[[Module:cuvigt|Geometry Transforms]]--><br />
# Image Filtering<!--[[Module:cuviif|Image Filtering]]--><br />
# Image Statistics<!--[[Module:cuviis|Image Statistics]]--><br />
# Image Transforms<!--[[Module:cuviit|Image Transforms]]--><br />
# Image Codecs<br />
<br/><br />
<br />
==Function List==<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|- valign="top"<br />
|<br />
===Arithmetic & Logical===<br />
# [[Function:Abs|abs]] - Computes absolute value of each image pixel<br />
# [[Function:AbsDiff|absDiff]] - Computes absolute difference between 2 images.<br />
# [[Function:Add|add]] - Adds two images<br />
# [[Function:AND|AND]] - Bitwise AND operation between two images.<br />
# [[Function:Cbrt|cbrt]] - Computes cube root of each image pixel<br />
# [[Function:Ceil|ceil]] - Applies ceil function to each image pixel<br />
# [[Function:Divide|divide]] - Divides pixel values of two images<br />
# [[Function:dot|dot]]<br />
# [[Function:Exp|exp]] - Computes exponential of each image pixel<br />
# [[Function:Floor|floor]] - Applies floor function to each image pixel<br />
# [[Function:InRange|inRange]] - Checks if image pixels lie between a range of values<br />
# [[Function:Invert|invert]] - Computes matrix inverse using LU factorization<br />
# [[Function:MatMul|matMul]] - Performs matrix multiplication<br />
# [[Function:MatMulTrans|matMulTrans]] - Performs matrix multiplication with its transpose<br />
# [[Function:Multiply|multiply]] - Multiplies pixel values of two images<br />
# [[Function:NOT|NOT]] - Inverts the bits of each pixel.<br />
# [[Function:OR|OR]] - Bitwise OR operation between two images.<br />
# [[Function:Pow|pow]] - Raise each pixel to a specified power.<br />
# [[Function:Round|round]] - Rounds each pixel to nearest integer value.<br />
# [[Function:SHL|SHL]] - Left shift each pixel of an image.<br />
# [[Function:SHR|SHR]] - Right shift each pixel of an image<br />
# [[Function:Sqrt|sqrt]] - Takes square root of each pixel of an image.<br />
# [[Function:Subtract|subtract]] - Subtracts pixel values of two images.<br />
# [[Function:XOR|XOR]] - Logical bitwise XOR operation between two images.<br />
<br />
===Color Operations===<br />
# [[Function:Adjust|adjust]] - Equivalent to MATLAB's imadjust<br />
# [[Function:AutoColor|autoColor]] - Fixes false colors at pixel level using a propriety approach<br />
# [[Function:BorderMask|borderMask]] - Masks image borders with custom intensity<br />
# [[Function:blackGammaLUT|blackGammaLUT]] - Remaps image values according to 3 look up tables<br />
# [[Function:ChannelMix|channelMix]] - Applies a color twist matrix to an image<br />
# [[Function:ChannelMerge|channelMerge]] - Merges R, G and B Channel to form a color image<br />
# [[Function:ChannelSplit|channelSplit]] - Splits a three channel image into R, G and B channels<br />
# [[Function:ColorPick|colorPick]] - Performs color segmentation of image by selecting a single color<br />
# [[Function:Dehaze|dehaze]] - Makes sense of images taken in a blizzard<br />
# [[Function:Demosaic|demosaic]] - Restores an RGB image from a CFA Bayer image<br />
# [[Function:DemosaicDFPD|demosaicDFPD]] - Restores an RGB image from a CFA Bayer image using DFPD algorithm<br />
# [[Function:fpn|fpn]]<br />
# [[Function:FPNCorrection|FPNCorrection]]<br />
# [[Function:GammaCorrect|gammaCorrect]] - Performs gamma correction of an image<br />
# [[Function:Gray2rgb|gray2rgb]] - Copy a grayscale image to each channel of an RGB image.<br />
# [[Function:HistEq|histEq]] - Performs histogram equalization<br />
# [[Function:Hsv2rgb|hsv2rgb]] - Converts image from HSV color space to RGB.<br />
# [[Function:ImageBinary|imageBinary]] - Converts input image into a binary image based on threshold<br />
# [[Function:Lab2rgb|Lab2rgb]] - Converts image from CIE Lab color space to RGB.<br />
# [[Function:LogTransform|logTransform]] - Applies log transformation for contrast enhancement of an image<br />
# [[Function:Lowlight|lowlight]] - enhances the low intensity colors in a dark photo<br />
# [[Function:LUT|LUT]] - Remaps image values according to look up table<br />
# [[Function:RGB2Gray|rgb2gray]] - Converts an RGB image to gray scale<br />
# [[Function:Rgb2hsv|rgb2hsv]] - Converts an RGB image to HSV color space<br />
# [[Function:Rgb2Lab|rgb2Lab]] - Converts an RGB image to CIE Lab color space<br />
# [[Function:Rgb2ycbcr|rgb2ycbcr]] - Converts an RGB image to YCbCr color space<br />
# [[Function:RGB2YUV|rgb2yuv]] - Converts RGB image to YUV color space<br />
# [[Function:Ycbcr2rgb|ycbcr2rgb]] - Converts YCbCr image to an RGB image<br />
# [[Function:YUV2RGB|yuv2rgb]] - Converts YUV image to an RGB image.<br />
# [[Function:YUV422TOV210|YUV422TOV210]]<br />
# [[Function:YUV444TOV210|YUV444TOV210]]<br />
# [[Function:V210TOYUV444|V210TOYUV444]]<br />
<br />
===Computer Vision===<br />
# [[Function:EigenValsVecs|eigenValsVecs]] - Calculates eigen values and eigen vectors at each pixel in an image<br />
# [[Function:findTransformECC|findTransformECC]] - Calculates geometric transform between two images in terms of the ECC criterion<br />
# [[Function:GoodFeaturesToTrack|goodFeaturesToTrack]] - selects N best points on a image using KLT or Harris<br />
# [[Function:MinEigenVal|minEigenVal]] - Calculates the minimum eigen value at each pixel in an image<br />
# [[Function:OpticalFlowHS|opticalFlowHS]] - Calculates flow of each image pixel in two frames using Horn–Schunck method<br />
# [[Function:opticalFlowPyrLKDense|opticalFlowPyrLKDense]] - Calculates flow of each image pixel in two frames using pyramidal Lucas–Kanade method<br />
# [[Function:TrackFeatures|trackFeatures]] - Tracks input features from frame 1 onto frame 2 using KLT method<br />
# [[Function:FocusStack|focusStack]] - Stacks multiples photos with various focus into a single all focused image<br />
<br />
===Data Exchange===<br />
# [[Function:BitConversion|bitConversion]] - Converts image pixel values from one data type to another.<br />
# [[Function:ConvertScale|convertScale]] - Converts image data type with optional scaling.<br />
# [[Function:GenerateRandomImage|generateRandomImage]] - Creates a new random image.<br />
# [[Function:GetChannel|getChannel]] - Extracts a channel of an image.<br />
# [[Function:PadImage|padImage]] - Pads any side of the image with the value specified.<br />
# [[Function:Rectangle|rectangle]] - Draws a rectangle on the specified region of an image.<br />
# [[Function:Threshold|threshold]] - Clamps image pixel values between specified thresholds.<br />
<br />
===Geometry Transforms===<br />
# [[Function:Crop|crop]] - Crops the desired portion of an image<br />
# [[Function:Flip|flipImage]] - Mirrors an image about a horizontal or vertical axis, or both<br />
# [[Function:Resize|resize]] - Resizes input image using specified interpolation<br />
# [[Function:Rotate|rotate]] - Rotates an image about specified anchor<br />
# [[Function:RotateNoCrop|RotateNoCrop]] - Rotates an image about specified anchor<br />
# [[Function:Taper|taper]] - Smartly extends image border<br />
# [[Function:Transpose|transpose]] - Takes Transpose of the image<br />
# [[Function:WarpAffine|warpAffine]] - Applies an affine transformation to an image.<br />
# [[Function:WarpAffineBack|warpAffineBack]] - Applies an inverse affine transformation to an image.<br />
# [[Function:WarpPerspective|warpPerspective]] - Applies an affine transformation to an image.<br />
# [[Function:WarpPerspectiveBack|warpPerspectiveBack]] - Applies an inverse affine transformation to an image.<br />
<br />
===Image Filtering===<br />
# [[Function:ImageFilter|imageFilter]] - Performs linear 1D and 2D image filtering<br />
# [[Function:ImageGradients|imageGradients]] - Calculates X and Y gradients of image<br />
# [[Function:MinFilter|minFilter]] - Filters an image using a min filter<br />
# [[Function:MaxFilter|maxFilter]] - Filters an image using a max filter<br />
# [[Function:MedianFilter|medianFilter]] - Applies 2D median filter on an image<br />
# [[Function:UnderwaterFilter|underwaterFilter]] - Brings out original colors of underwater photography.<br />
<br />
===Image Statistics===<br />
# [[Function:CalcHist|calcHist]] - Computes the histogram of an 8 bit image.<br />
# [[Function:CountInRange|countInRange]] - Counts the number of pixels within the given intensity range<br />
# [[Function:Max|max]] - Computes the maximum of image pixel values<br />
# [[Function:Mean|mean]] - Computes the mean of image pixel values<br />
# [[Function:MeanStdDev|meanStdDev]] - Computes the mean and standard deviation of image pixel values<br />
# [[Function:Min|min]] - Computes the minimum of image pixel values<br />
# [[Function:MinMax|minMax]] - Computes the minimum and maximum of image pixel values<br />
# [[Function:Sum|sum]] - Computes the sum of image pixel values<br />
<br />
===Image Transforms===<br />
# [[Function:Fft2|fft2]] - Computes the 2D Fast Fourier Transform of an image.<br />
# [[Function:FftGetProperty|fftGetProperty]] - Gets magnitude, phase, real and imaginary part of an FFT image with optional scaling.<br />
# [[Function:FftShift|fftShift]] - Moves low frequency components to the center of an FFT image.<br />
# [[Function:haarFwd|haarFwd]] - Performs one-level wavelet decomposition of an image using haar basis<br />
# [[Function:haarInv|haarInv]] - Performs one-level haar wavelet reconstruction of an image<br />
<br />
===Image Codecs===<br />
# [[Function:Encode|encode]] - Encodes image pixel array into JPEG.<br />
# [[Function:Decode|decode]] - Decodes a JPEG into an image pixel array.<br />
<br />
<!--===Video Stabilization===<br />
* [[Function:CuviMotionEstimator|CuviMotionEstimator]] - Class to estimate global motion vectors between an image pair.<br />
* [[Function:CuviVideoStabilizer|CuviVideoStabilizer]] - Class for transparent video stabilization of a video file.--><br />
|}<br />
<br/><br />
<!-- CUVI Core Starts --><br />
<br />
==CUVI Core==<br />
CUVI Core includes the following helper functionality:<br />
<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|style="width:100%;"|<br />
===CuviImage===<br />
A C++ class to hold image data on the device. It has the following methods<br />
* CuviImage(); - default constructor<br />
* CuviImage(CuviSize size, Cuvi32s depth, Cuvi32s channels) - Main Constructor. throws exception in case of failure<br />
* CuviImage(const CuviImage&) - copy constructor<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch) - Copy image data from host to device.<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch, const CuviStream& stream) - Asynchronously copy image data from host to device.<br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin) - Copy a chunk of image data from host to device. <br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin, const CuviStream& stream) - Asynchronously copy a chunk of image data from host to device. <br />
* download(void* pDstHost, const Cuvi32s dstPitch) - Copy image data from device to host<br />
* download(void* pDstHost, const Cuvi32s dstPitch, const CuviStream& stream) - Asynchronously copy image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI) - Copy a chunk of image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI, const CuviStream& stream) - Asynchronously copy a chunk of image data from device to host<br />
* copyTo(CuviImage& dst, CuviPoint2D<int> dstOrigin, CuviRect srcROI, const CuviStream& stream = CuviStream()) - Copy image data (or an ROI of it) from one Cuvi Image to another.<br />
* show(const std::string& title = "CUVI Image", Cuvi32s milliseconds = 0) - Render device image directly on the screen<br />
* ~CuviImage() - Destructor. Frees Device Memory. throws exception in case of failure<br />
<br />
{|<br />
|-valign="top"<br />
|style="width:50%;"|<br />
<br />
===Timer===<br />
CUVI provides a C++ Timer class that accurately profiles your application timing<br />
* Start() - Starts the timer.<br />
* Stop() - Stops the timer<br />
* Reset() - Resets the timer<br />
* GetElapsedTime() - Returns the elapsed time between Start and Stop calls in seconds<br />
|style="width:50%; "|<br />
<br />
===DeviceProperties===<br />
CuviDeviceProperties holds all the important properties of underlying CUDA device. Device management functions are present inside the namespace cuvi::device.<br />
*Cuvi32s getDeviceCount() - Gives the count of devices installed in the machine<br />
*Cuvi32s getCurentDevice() - Returns the ID of selected graphics card<br />
*CuviStatus setCurrentDevice(const Cuvi32s ID) - Makes any device an active device<br />
*CuviStatus getDeviceProperties(const Cuvi32s deviceID, CuviDeviceProperties& props) - Returns all the important properties of desired GPU<br />
|}<br />
|}<br />
<!-- CUVI Core Ends--></div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:InRange&diff=1754
Function:InRange
2022-10-31T08:46:46Z
<p>Jawad: Created page with "__NOTOC__ Checks if image values lie between the range defined by two values and returns a boolean image output. The output image is always 8-bit with either 0 or 255 as an pixel value. ====Function==== {| |style="font-size:100%;"| <syntaxhighlight lang="cpp"> CuviStatus inRange(const CuviImage& src, const Cuvi32f rangeMin, const Cuvi32f rangeMax, const CuviStream& stream = CuviStream()); </syn..."</p>
<hr />
<div>__NOTOC__<br />
Checks if image values lie between the range defined by two values and returns a boolean image output. The output image is always 8-bit with either 0 or 255 as an pixel value.<br />
<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviStatus inRange(const CuviImage& src,<br />
const Cuvi32f rangeMin,<br />
const Cuvi32f rangeMax,<br />
const CuviStream& stream = CuviStream());<br />
<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src<br />
| CuviImage&<br />
| Input Image<br />
|-<br />
| rangeMin<br />
| Cuvi32f<br />
| Starting value of range<br />
|-<br />
| rangeMax<br />
| Cuvi32f<br />
| Ending value of range<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
====Image Type Support====<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Type<br />
|-<br />
| 8uC1<br />
|-<br />
| 8uC3<br />
|-<br />
| 16uC1<br />
|-<br />
| 16uC3<br />
|-<br />
| 32FC1<br />
|-<br />
| 32FC3<br />
|}<br />
|}<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path), output;<br />
<br />
<br />
CuviStatus status = cuvi::arithmeticLogical::inRange(input,<br />
67,<br />
128,<br />
output);<br />
<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=CUVI_Features&diff=1753
CUVI Features
2022-10-31T08:37:35Z
<p>Jawad: /* Color Operations */</p>
<hr />
<div>__NOTOC__<br />
CUVI SDK is an image processing kit written and developed on C-CUDA and C++ for over a period of ten years. The SDK includes 100+ image processing and computer vision functions that are plug-n-play for imaging applications in a plethora of verticals. Each function is hand crafted and highly optimized to run on CUDA supported GPUs. Many functions use our own proprietary approach to algorithms and processing to make the best out of hardware and input data.<br />
<br />
==Modules==<br />
CUVI comes in following image processing modules.<br />
# Arithmetic & Logical<!--[[Module:cuvial|Arithmetic & Logical]]--><br />
# Color Operations <!--[[Module:cuvico|Color Operations]]--><br />
# Computer Vision<!--[[Module:cuvicv|Computer Vision]]--><br />
# Data Exchange<!--[[Module:cuvide|Data Exchange]]--><br />
# Geometry Transforms<!--[[Module:cuvigt|Geometry Transforms]]--><br />
# Image Filtering<!--[[Module:cuviif|Image Filtering]]--><br />
# Image Statistics<!--[[Module:cuviis|Image Statistics]]--><br />
# Image Transforms<!--[[Module:cuviit|Image Transforms]]--><br />
# Image Codecs<br />
<br/><br />
<br />
==Function List==<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|- valign="top"<br />
|<br />
===Arithmetic & Logical===<br />
# [[Function:Abs|abs]] - Computes absolute value of each image pixel<br />
# [[Function:AbsDiff|absDiff]] - Computes absolute difference between 2 images.<br />
# [[Function:Add|add]] - Adds two images<br />
# [[Function:AND|AND]] - Bitwise AND operation between two images.<br />
# [[Function:Cbrt|cbrt]] - Computes cube root of each image pixel<br />
# [[Function:Ceil|ceil]] - Applies ceil function to each image pixel<br />
# [[Function:Divide|divide]] - Divides pixel values of two images<br />
# [[Function:dot|dot]]<br />
# [[Function:Exp|exp]] - Computes exponential of each image pixel<br />
# [[Function:Floor|floor]] - Applies floor function to each image pixel<br />
# [[Function:inRange|inRange]]<br />
# [[Function:Invert|invert]] - Computes matrix inverse using LU factorization<br />
# [[Function:MatMul|matMul]] - Performs matrix multiplication<br />
# [[Function:MatMulTrans|matMulTrans]] - Performs matrix multiplication with its transpose<br />
# [[Function:Multiply|multiply]] - Multiplies pixel values of two images<br />
# [[Function:NOT|NOT]] - Inverts the bits of each pixel.<br />
# [[Function:OR|OR]] - Bitwise OR operation between two images.<br />
# [[Function:Pow|pow]] - Raise each pixel to a specified power.<br />
# [[Function:Round|round]] - Rounds each pixel to nearest integer value.<br />
# [[Function:SHL|SHL]] - Left shift each pixel of an image.<br />
# [[Function:SHR|SHR]] - Right shift each pixel of an image<br />
# [[Function:Sqrt|sqrt]] - Takes square root of each pixel of an image.<br />
# [[Function:Subtract|subtract]] - Subtracts pixel values of two images.<br />
# [[Function:XOR|XOR]] - Logical bitwise XOR operation between two images.<br />
<br />
===Color Operations===<br />
# [[Function:Adjust|adjust]] - Equivalent to MATLAB's imadjust<br />
# [[Function:AutoColor|autoColor]] - Fixes false colors at pixel level using a propriety approach<br />
# [[Function:BorderMask|borderMask]] - Masks image borders with custom intensity<br />
# [[Function:blackGammaLUT|blackGammaLUT]] - Remaps image values according to 3 look up tables<br />
# [[Function:ChannelMix|channelMix]] - Applies a color twist matrix to an image<br />
# [[Function:ChannelMerge|channelMerge]] - Merges R, G and B Channel to form a color image<br />
# [[Function:ChannelSplit|channelSplit]] - Splits a three channel image into R, G and B channels<br />
# [[Function:ColorPick|colorPick]] - Performs color segmentation of image by selecting a single color<br />
# [[Function:Dehaze|dehaze]] - Makes sense of images taken in a blizzard<br />
# [[Function:Demosaic|demosaic]] - Restores an RGB image from a CFA Bayer image<br />
# [[Function:DemosaicDFPD|demosaicDFPD]] - Restores an RGB image from a CFA Bayer image using DFPD algorithm<br />
# [[Function:fpn|fpn]]<br />
# [[Function:FPNCorrection|FPNCorrection]]<br />
# [[Function:GammaCorrect|gammaCorrect]] - Performs gamma correction of an image<br />
# [[Function:Gray2rgb|gray2rgb]] - Copy a grayscale image to each channel of an RGB image.<br />
# [[Function:HistEq|histEq]] - Performs histogram equalization<br />
# [[Function:Hsv2rgb|hsv2rgb]] - Converts image from HSV color space to RGB.<br />
# [[Function:ImageBinary|imageBinary]] - Converts input image into a binary image based on threshold<br />
# [[Function:Lab2rgb|Lab2rgb]] - Converts image from CIE Lab color space to RGB.<br />
# [[Function:LogTransform|logTransform]] - Applies log transformation for contrast enhancement of an image<br />
# [[Function:Lowlight|lowlight]] - enhances the low intensity colors in a dark photo<br />
# [[Function:LUT|LUT]] - Remaps image values according to look up table<br />
# [[Function:RGB2Gray|rgb2gray]] - Converts an RGB image to gray scale<br />
# [[Function:Rgb2hsv|rgb2hsv]] - Converts an RGB image to HSV color space<br />
# [[Function:Rgb2Lab|rgb2Lab]] - Converts an RGB image to CIE Lab color space<br />
# [[Function:Rgb2ycbcr|rgb2ycbcr]] - Converts an RGB image to YCbCr color space<br />
# [[Function:RGB2YUV|rgb2yuv]] - Converts RGB image to YUV color space<br />
# [[Function:Ycbcr2rgb|ycbcr2rgb]] - Converts YCbCr image to an RGB image<br />
# [[Function:YUV2RGB|yuv2rgb]] - Converts YUV image to an RGB image.<br />
# [[Function:YUV422TOV210|YUV422TOV210]]<br />
# [[Function:YUV444TOV210|YUV444TOV210]]<br />
# [[Function:V210TOYUV444|V210TOYUV444]]<br />
<br />
===Computer Vision===<br />
# [[Function:EigenValsVecs|eigenValsVecs]] - Calculates eigen values and eigen vectors at each pixel in an image<br />
# [[Function:findTransformECC|findTransformECC]] - Calculates geometric transform between two images in terms of the ECC criterion<br />
# [[Function:GoodFeaturesToTrack|goodFeaturesToTrack]] - selects N best points on a image using KLT or Harris<br />
# [[Function:MinEigenVal|minEigenVal]] - Calculates the minimum eigen value at each pixel in an image<br />
# [[Function:OpticalFlowHS|opticalFlowHS]] - Calculates flow of each image pixel in two frames using Horn–Schunck method<br />
# [[Function:opticalFlowPyrLKDense|opticalFlowPyrLKDense]] - Calculates flow of each image pixel in two frames using pyramidal Lucas–Kanade method<br />
# [[Function:TrackFeatures|trackFeatures]] - Tracks input features from frame 1 onto frame 2 using KLT method<br />
# [[Function:FocusStack|focusStack]] - Stacks multiples photos with various focus into a single all focused image<br />
<br />
===Data Exchange===<br />
# [[Function:BitConversion|bitConversion]] - Converts image pixel values from one data type to another.<br />
# [[Function:ConvertScale|convertScale]] - Converts image data type with optional scaling.<br />
# [[Function:GenerateRandomImage|generateRandomImage]] - Creates a new random image.<br />
# [[Function:GetChannel|getChannel]] - Extracts a channel of an image.<br />
# [[Function:PadImage|padImage]] - Pads any side of the image with the value specified.<br />
# [[Function:Rectangle|rectangle]] - Draws a rectangle on the specified region of an image.<br />
# [[Function:Threshold|threshold]] - Clamps image pixel values between specified thresholds.<br />
<br />
===Geometry Transforms===<br />
# [[Function:Crop|crop]] - Crops the desired portion of an image<br />
# [[Function:Flip|flipImage]] - Mirrors an image about a horizontal or vertical axis, or both<br />
# [[Function:Resize|resize]] - Resizes input image using specified interpolation<br />
# [[Function:Rotate|rotate]] - Rotates an image about specified anchor<br />
# [[Function:RotateNoCrop|RotateNoCrop]] - Rotates an image about specified anchor<br />
# [[Function:Taper|taper]] - Smartly extends image border<br />
# [[Function:Transpose|transpose]] - Takes Transpose of the image<br />
# [[Function:WarpAffine|warpAffine]] - Applies an affine transformation to an image.<br />
# [[Function:WarpAffineBack|warpAffineBack]] - Applies an inverse affine transformation to an image.<br />
# [[Function:WarpPerspective|warpPerspective]] - Applies an affine transformation to an image.<br />
# [[Function:WarpPerspectiveBack|warpPerspectiveBack]] - Applies an inverse affine transformation to an image.<br />
<br />
===Image Filtering===<br />
# [[Function:ImageFilter|imageFilter]] - Performs linear 1D and 2D image filtering<br />
# [[Function:ImageGradients|imageGradients]] - Calculates X and Y gradients of image<br />
# [[Function:MinFilter|minFilter]] - Filters an image using a min filter<br />
# [[Function:MaxFilter|maxFilter]] - Filters an image using a max filter<br />
# [[Function:MedianFilter|medianFilter]] - Applies 2D median filter on an image<br />
# [[Function:UnderwaterFilter|underwaterFilter]] - Brings out original colors of underwater photography.<br />
<br />
===Image Statistics===<br />
# [[Function:CalcHist|calcHist]] - Computes the histogram of an 8 bit image.<br />
# [[Function:CountInRange|countInRange]] - Counts the number of pixels within the given intensity range<br />
# [[Function:Max|max]] - Computes the maximum of image pixel values<br />
# [[Function:Mean|mean]] - Computes the mean of image pixel values<br />
# [[Function:MeanStdDev|meanStdDev]] - Computes the mean and standard deviation of image pixel values<br />
# [[Function:Min|min]] - Computes the minimum of image pixel values<br />
# [[Function:MinMax|minMax]] - Computes the minimum and maximum of image pixel values<br />
# [[Function:Sum|sum]] - Computes the sum of image pixel values<br />
<br />
===Image Transforms===<br />
# [[Function:Fft2|fft2]] - Computes the 2D Fast Fourier Transform of an image.<br />
# [[Function:FftGetProperty|fftGetProperty]] - Gets magnitude, phase, real and imaginary part of an FFT image with optional scaling.<br />
# [[Function:FftShift|fftShift]] - Moves low frequency components to the center of an FFT image.<br />
# [[Function:haarFwd|haarFwd]] - Performs one-level wavelet decomposition of an image using haar basis<br />
# [[Function:haarInv|haarInv]] - Performs one-level haar wavelet reconstruction of an image<br />
<br />
===Image Codecs===<br />
# [[Function:Encode|encode]] - Encodes image pixel array into JPEG.<br />
# [[Function:Decode|decode]] - Decodes a JPEG into an image pixel array.<br />
<br />
<!--===Video Stabilization===<br />
* [[Function:CuviMotionEstimator|CuviMotionEstimator]] - Class to estimate global motion vectors between an image pair.<br />
* [[Function:CuviVideoStabilizer|CuviVideoStabilizer]] - Class for transparent video stabilization of a video file.--><br />
|}<br />
<br/><br />
<!-- CUVI Core Starts --><br />
<br />
==CUVI Core==<br />
CUVI Core includes the following helper functionality:<br />
<br />
{| style="width:100%; background:#f6f6f6; margin-top:1.2em; border:1px solid #ccc;"<br />
|style="width:100%;"|<br />
===CuviImage===<br />
A C++ class to hold image data on the device. It has the following methods<br />
* CuviImage(); - default constructor<br />
* CuviImage(CuviSize size, Cuvi32s depth, Cuvi32s channels) - Main Constructor. throws exception in case of failure<br />
* CuviImage(const CuviImage&) - copy constructor<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch) - Copy image data from host to device.<br />
* upload(const void* pSrcHost, const Cuvi32s srcPitch, const CuviStream& stream) - Asynchronously copy image data from host to device.<br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin) - Copy a chunk of image data from host to device. <br />
* upload(const void* pSrcHost, CuviRect srcROI, const Cuvi32s srcPitch, CuviPoint2D<int> dstOrigin, const CuviStream& stream) - Asynchronously copy a chunk of image data from host to device. <br />
* download(void* pDstHost, const Cuvi32s dstPitch) - Copy image data from device to host<br />
* download(void* pDstHost, const Cuvi32s dstPitch, const CuviStream& stream) - Asynchronously copy image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI) - Copy a chunk of image data from device to host<br />
* download(void* pDstHost, CuviPoint2D<int> dstOrigin, const Cuvi32s dstPitch, CuviRect srcROI, const CuviStream& stream) - Asynchronously copy a chunk of image data from device to host<br />
* copyTo(CuviImage& dst, CuviPoint2D<int> dstOrigin, CuviRect srcROI, const CuviStream& stream = CuviStream()) - Copy image data (or an ROI of it) from one Cuvi Image to another.<br />
* show(const std::string& title = "CUVI Image", Cuvi32s milliseconds = 0) - Render device image directly on the screen<br />
* ~CuviImage() - Destructor. Frees Device Memory. throws exception in case of failure<br />
<br />
{|<br />
|-valign="top"<br />
|style="width:50%;"|<br />
<br />
===Timer===<br />
CUVI provides a C++ Timer class that accurately profiles your application timing<br />
* Start() - Starts the timer.<br />
* Stop() - Stops the timer<br />
* Reset() - Resets the timer<br />
* GetElapsedTime() - Returns the elapsed time between Start and Stop calls in seconds<br />
|style="width:50%; "|<br />
<br />
===DeviceProperties===<br />
CuviDeviceProperties holds all the important properties of underlying CUDA device. Device management functions are present inside the namespace cuvi::device.<br />
*Cuvi32s getDeviceCount() - Gives the count of devices installed in the machine<br />
*Cuvi32s getCurentDevice() - Returns the ID of selected graphics card<br />
*CuviStatus setCurrentDevice(const Cuvi32s ID) - Makes any device an active device<br />
*CuviStatus getDeviceProperties(const Cuvi32s deviceID, CuviDeviceProperties& props) - Returns all the important properties of desired GPU<br />
|}<br />
|}<br />
<!-- CUVI Core Ends--></div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:BlackGammaLUT&diff=1752
Function:BlackGammaLUT
2022-10-31T08:31:15Z
<p>Jawad: </p>
<hr />
<div>__NOTOC__<br />
Remaps image values according to look up tables but instead of a single table like in [[Function:LUT|LUT]], the blackGammaLUT takes separate tables for each channel.<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviStatus blackGammaLUT(const CuviImage& src,<br />
CuviImage& dst,<br />
Cuvi16u* redLUT,<br />
Cuvi16u* greenLUT,<br />
Cuvi16u* blueLUT, <br />
const CuviStream& stream = CuviStream());<br />
<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src<br />
| CuviImage&<br />
| Input Image<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| redLUT<br />
| Cuvi16u*<br />
| The look-up table for red channel<br />
|-<br />
| greenLUT<br />
| Cuvi16u*<br />
| The look-up table for green channel<br />
|-<br />
| blueLUT<br />
| Cuvi16u*<br />
| The look-up table for blue channel<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
====Image Type Support====<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Type<br />
|-<br />
| 8uC3<br />
|-<br />
| 16uC3<br />
|}<br />
|}<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path), output;<br />
<br />
//blackGammaLUT Parameters<br />
const int mappingSize = 256;<br />
Cuvi16u redLUT[mappingSize], greenLUT[mappingSize], blueLUT[mappingSize];<br />
for (int i = 0; i < mappingSize; i++) {<br />
redLUT[i] = 255 - i;<br />
greenLUT[i] = i;<br />
blueLUT[i] = i;<br />
}<br />
//blackGammaLUT<br />
CuviStatus status = cuvi::colorOperations::blackGammaLUT(input,<br />
output,<br />
redLUT,<br />
greenLUT,<br />
blueLUT);<br />
<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:BlackGammaLUT&diff=1751
Function:BlackGammaLUT
2022-10-31T08:30:17Z
<p>Jawad: Created page with "__NOTOC__ Remaps image values according to look up tables but instead of a single table like in Function:LUT, the blackGammaLUT takes separate tables for each channel. ====Function==== {| |style="font-size:100%;"| <syntaxhighlight lang="cpp"> CuviStatus blackGammaLUT(const CuviImage& src, CuviImage& dst, Cuvi16u* redLUT, Cuvi16u* greenLUT, Cuvi16u* blueLUT,..."</p>
<hr />
<div>__NOTOC__<br />
Remaps image values according to look up tables but instead of a single table like in [[LUT|Function:LUT]], the blackGammaLUT takes separate tables for each channel.<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviStatus blackGammaLUT(const CuviImage& src,<br />
CuviImage& dst,<br />
Cuvi16u* redLUT,<br />
Cuvi16u* greenLUT,<br />
Cuvi16u* blueLUT, <br />
const CuviStream& stream = CuviStream());<br />
<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src<br />
| CuviImage&<br />
| Input Image<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| redLUT<br />
| Cuvi16u*<br />
| The look-up table for red channel<br />
|-<br />
| greenLUT<br />
| Cuvi16u*<br />
| The look-up table for green channel<br />
|-<br />
| blueLUT<br />
| Cuvi16u*<br />
| The look-up table for blue channel<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
====Image Type Support====<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Type<br />
|-<br />
| 8uC3<br />
|-<br />
| 16uC3<br />
|}<br />
|}<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path), output;<br />
<br />
//blackGammaLUT Parameters<br />
const int mappingSize = 256;<br />
Cuvi16u redLUT[mappingSize], greenLUT[mappingSize], blueLUT[mappingSize];<br />
for (int i = 0; i < mappingSize; i++) {<br />
redLUT[i] = 255 - i;<br />
greenLUT[i] = i;<br />
blueLUT[i] = i;<br />
}<br />
//blackGammaLUT<br />
CuviStatus status = cuvi::colorOperations::blackGammaLUT(input,<br />
output,<br />
redLUT,<br />
greenLUT,<br />
blueLUT);<br />
<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Function:LUT&diff=1750
Function:LUT
2022-10-31T08:24:38Z
<p>Jawad: /* Image Type Support */</p>
<hr />
<div>__NOTOC__<br />
Remaps image values according to look up table.<br />
====Function====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviStatus LUT(const CuviImage& src,<br />
const CuviImage& mapping,<br />
CuviImage& dst,<br />
const CuviStream& stream = CuviStream());<br />
<br />
</syntaxhighlight><br />
|}<br />
<br />
====Parameters====<br />
{|<br />
|style="font-size:75%;"|<br />
{|class="wikitable"<br />
|-<br />
! Name <br />
! Type <br />
! Description<br />
|-<br />
| src<br />
| CuviImage&<br />
| Input Image<br />
|-<br />
| mapping<br />
| CuviImage&<br />
| The look-up table<br />
|-<br />
| dst<br />
| CuviImage&<br />
| Resultant Image<br />
|-<br />
| stream <br />
| CuviStream&<br />
| GPU stream ID for execution<br />
|}<br />
|}<br />
<br />
====Image Type Support====<br />
{|<br />
|style="font-size:75%;"|<br />
{| class="wikitable"<br />
|-<br />
! Type<br />
|-<br />
| 8uC1<br />
|-<br />
| 8uC3<br />
|-<br />
| 16uC1<br />
|}<br />
|}<br />
<br />
====Example====<br />
{|<br />
|style="font-size:100%;"|<br />
<syntaxhighlight lang="cpp"><br />
<br />
CuviImage input = cuvi::io::loadImage(path), output;<br />
<br />
//Create LUT on host<br />
const int mappingSize = 256;<br />
<br />
unsigned char mappingValues[mappingSize];<br />
<br />
//Initialize LUT with values which invert the image values<br />
for(int i=0; i<mappingSize; i++)<br />
mappingValues[i] = 255 - i;<br />
<br />
//Create and upload LUT matrix on device<br />
CuviImage mapping(mappingSize,1, CUVI_8UC1);<br />
mapping.upload(mappingValues, sizeof(mappingValues));<br />
<br />
cuvi::colorOperations::LUT( input, mapping, output );<br />
<br />
</syntaxhighlight><br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1749
Performance & Benchmark
2022-10-31T07:04:39Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|2.33<br />
|5.23<br />
|7.01<br />
|17.08<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.04<br />
|0.14<br />
|0.58<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.08<br />
|0.33<br />
|0.82<br />
|2.89<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- GTX 1650 Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.05<br />
|0.16<br />
|0.64<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1748
Performance & Benchmark
2022-10-31T06:50:31Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|2.33<br />
|5.23<br />
|7.01<br />
|17.08<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.04<br />
|0.14<br />
|0.58<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- GTX 1650 Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.05<br />
|0.16<br />
|0.64<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1747
Performance & Benchmark
2022-10-31T06:25:41Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.04<br />
|0.14<br />
|0.58<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- GTX 1650 Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.05<br />
|0.16<br />
|0.64<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1746
Performance & Benchmark
2022-10-30T12:44:00Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- GTX 1650 Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.05<br />
|0.16<br />
|0.64<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1745
Performance & Benchmark
2022-10-30T12:42:48Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.02<br />
|0.05<br />
|0.16<br />
|0.64<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1744
Performance & Benchmark
2022-10-30T12:27:39Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="GTX 1650"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1650 having '''896''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.08<br />
|0.18<br />
|0.72<br />
|2.92<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.09<br />
|0.21<br />
|0.85<br />
|3.41<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.35<br />
|0.78<br />
|3.53<br />
|13.1<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.75<br />
|1.69<br />
|6.74<br />
|27.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.18<br />
|0.41<br />
|1.60<br />
|6.34<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.15<br />
|0.32<br />
|1.21<br />
|9.44<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.11<br />
|0.42<br />
|1.74<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.09<br />
|0.22<br />
|0.90<br />
|3.66<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.06<br />
|0.12<br />
|0.49<br />
|2.01<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|46.10<br />
|97.24<br />
|257.62<br />
|1180.50<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.15<br />
|0.35<br />
|1.40<br />
|5.63<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.06<br />
|0.18<br />
|0.61<br />
|2.49<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.36<br />
|0.80<br />
|3.22<br />
|12.88<br />
|-<br />
|[[Function:Resize|resize]] - Scale=0.5<br />
|0.03<br />
|0.06<br />
|0.23<br />
|0.93 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.14<br />
|0.33<br />
|1.30<br />
|5.16<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.12<br />
|0.29<br />
|1.14<br />
|4.68<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.97<br />
|2.17<br />
|8.66<br />
|34.64<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.66<br />
|1.22<br />
|4.59<br />
|18.61<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.19<br />
|0.43<br />
|1.77<br />
|6.84<br />
|}<br />
</tab><br />
<!-- GTX 1650 Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1743
Performance & Benchmark
2022-10-30T08:14:29Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile)--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 Mobile having '''1,920''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1742
Performance & Benchmark
2022-10-30T08:11:14Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX having '''384''' CUDA Cores.<br />
<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1741
Performance & Benchmark
2022-10-30T08:08:48Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080 having '''2,560''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1740
Performance & Benchmark
2022-10-30T08:07:33Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
<!--|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano--><br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1739
Performance & Benchmark
2022-10-30T08:06:46Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having '''128''' CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1738
Performance & Benchmark
2022-10-30T08:06:33Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano having 128 CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1737
Performance & Benchmark
2022-10-30T08:06:22Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
having 128 CUDA Cores.<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1736
Performance & Benchmark
2022-10-30T08:06:06Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
|colspan="5" |Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
having '''128 CUDA Cores'''<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1735
Performance & Benchmark
2022-10-30T08:05:26Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
|colspan="5" |CUDA Cores = 128<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1734
Performance & Benchmark
2022-10-30T08:05:06Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
!colspan="4" |CUDA Cores = 128<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1733
Performance & Benchmark
2022-10-30T08:04:03Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
!colspan="2" |CUDA<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1732
Performance & Benchmark
2022-10-30T08:02:46Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
!CUDA<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=CUVI_Guide&diff=1731
CUVI Guide
2022-10-27T19:25:21Z
<p>Jawad: </p>
<hr />
<div>CUVI is a '''GPU-accelerated library''' for Imaging and Computer Vision applications.<br />
<br />
{|<br />
|-<br />
|width="180px"|<br />
[[File:Logo.png]]<br />
|td valign="top"|<br />
<br />
{|<br />
|-<br />
|width="200px" valign="top"|<br />
<p><b>Getting Started</b><br />
</p><br />
*[[Getting Started]]<br />
*[[Image I/O & Framework|I/O & Framework]]<br />
*[[CUVI by Example]]<br />
*[[CUVI Features|Features]]<br />
*[http://www.cuvilib.com/downloads/ Downloads]<br />
<br />
<br />
<br />
|width="200px" valign="top"|<br />
<p><b>Useful Links</b><br />
</p><br />
*[[Performance & Benchmark|Benchmark]]<br />
*[[Streams and Multi-GPU using CUVI|Multi-GPU]]<br />
*[[CUVI Release Notes|Release Notes]]<br />
<br />
|}<br />
|}</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1730
Performance & Benchmark
2022-10-27T10:50:51Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- GTX 1080 Starts --><br />
<tab name="GTX 1080"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on GTX 1080<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.05<br />
|0.10<br />
|0.42<br />
|1.69<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.04<br />
|0.08<br />
|0.34<br />
|1.33<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.12<br />
|0.26<br />
|1.01<br />
|4.04<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.31<br />
|0.69<br />
|2.77<br />
|10.98<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.04<br />
|0.10<br />
|0.40<br />
|1.61<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.08<br />
|0.18<br />
|0.61<br />
|2.18 <br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.05<br />
|0.10<br />
|0.35<br />
|1.25<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.99<br />
|0.21<br />
|0.74<br />
|2.73<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.02<br />
|0.05<br />
|0.21<br />
|0.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|8.66<br />
|14.44<br />
|65.14<br />
|270.59<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.06<br />
|0.14<br />
|0.58<br />
|2.30<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.03<br />
|0.07<br />
|0.23<br />
|0.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.19<br />
|0.41<br />
|1.70<br />
|6.83<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.08<br />
|0.16<br />
|0.66<br />
|2.69<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.22<br />
|0.79<br />
|3.21<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.30<br />
|0.66<br />
|2.63<br />
|9.18<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.45<br />
|0.96<br />
|3.39<br />
|11.62<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.34<br />
|1.35<br />
|5.10<br />
|}<br />
</tab><br />
<!-- GTX 1080 Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1729
Performance & Benchmark
2022-10-26T14:14:14Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Jetson Nano Starts --><br />
<tab name="Jetson Nano"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.7.0 on Jetson Nano<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|2.99<br />
|8.38<br />
|15.63<br />
|50.27<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|4.09<br />
|7.42<br />
|15.70<br />
|53.35<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|8.11<br />
|11.77<br />
|42.99<br />
|172.40<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|12.6<br />
|23.86<br />
|88.87<br />
|357.94<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|3.12<br />
|5.69<br />
|14.13<br />
|45.80<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|5.29<br />
|7.88<br />
|20.53<br />
|61.52<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|1.89<br />
|2.77<br />
|11.26<br />
|25.42<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|4.08<br />
|7.52<br />
|18.36<br />
|62.27<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|1.95<br />
|2.67<br />
|10.64<br />
|20.89<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|252.52<br />
|452.81<br />
|1830.54<br />
|7320.52<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|3.74<br />
|8.46<br />
|15.71<br />
|63.33<br />
|-<br />
|[[Function:Crop|crop]]<br />
|1.67<br />
|4.76<br />
|9.04<br />
|28.93<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|9.29<br />
|18.43<br />
|55.58<br />
|222.41<br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|3.43<br />
|7.73<br />
|26.00<br />
|58.34<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|5.09<br />
|11.48<br />
|19.86<br />
|81.36<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|18.44<br />
|26.80<br />
|89.58<br />
|358.29<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|29.55<br />
|50.74<br />
|79.09<br />
|332.95<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|10.27<br />
|18.60<br />
|40.45<br />
|130.86<br />
|}<br />
</tab><br />
<!-- Jetson Nano Ends--><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1728
Performance & Benchmark
2022-10-26T11:44:12Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 (Mobile) <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1727
Performance & Benchmark
2022-10-26T11:43:27Z
<p>Jawad: </p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Mobile Starts --><br />
<tab name="RTX 2060 (Mobile)"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Mobile Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1726
Performance & Benchmark
2022-10-26T06:53:17Z
<p>Jawad: /* Performance */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: '''26 FPS'''</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1725
Performance & Benchmark
2022-10-26T06:53:09Z
<p>Jawad: /* Performance */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: '''8k'''<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1724
Performance & Benchmark
2022-10-26T06:52:27Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents one or more functions.]]<br />
<br />
===Performance===<br />
*Image size: 8k<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1723
Performance & Benchmark
2022-10-26T06:51:40Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
*Image size: 8k<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1722
Performance & Benchmark
2022-10-26T06:49:23Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|300px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
*Image size: 8k<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1721
Performance & Benchmark
2022-10-26T06:49:11Z
<p>Jawad: /* Performance */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|400px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
*Image size: 8k<br />
*Debayer method: DFPD<br />
*RAW Size: 59.9 MB<br />
*Codec: JPEG2000<br />
*Sharpening: 7x7<br />
*GPU: GTX 1080<br />
*FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1720
Performance & Benchmark
2022-10-26T06:47:54Z
<p>Jawad: /* Performance */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|400px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
;Image size:: 8k<br />
;Debayer method: DFPD<br />
;RAW Size: 59.9 MB<br />
;Codec: JPEG2000<br />
;Sharpening: 7x7<br />
;GPU: GTX 1080<br />
;FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1719
Performance & Benchmark
2022-10-26T06:47:13Z
<p>Jawad: /* Performance */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|400px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
;Image size: 8k<br />
;Debayer method: DFPD<br />
;RAW Size: 59.9 MB<br />
;Codec: JPEG2000<br />
;Sharpening: 7x7<br />
;GPU: GTX 1080<br />
;FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1718
Performance & Benchmark
2022-10-26T06:46:15Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU and at over 100 FPS on a 2k image:<br />
[[File:color_pipeline.png|400px|thumb|left|Color pipeline where each box represents a function.]]<br />
<br />
===Performance===<br />
Image size: 8k<br />
Debayer method: DFPD<br />
RAW Size: 59.9 MB<br />
Codec: JPEG2000<br />
Sharpening: 7x7<br />
GPU: GTX 1080<br />
FPS: 26 FPS</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1717
Performance & Benchmark
2022-10-26T06:43:54Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU. <br />
[[File:color_pipeline.png|400px|thumb|left|Color pipeline where each box represents a function]]</div>
Jawad
https://wiki.cuvilib.com/index.php?title=Performance_%26_Benchmark&diff=1716
Performance & Benchmark
2022-10-26T06:43:44Z
<p>Jawad: /* Color Pipeline */</p>
<hr />
<div>Measured with NVIDIA's Performance tools for Windows and Linux. Timing figure represents time of kernel/function in milliseconds (rounded) on a single GPU. The benchmarks are performed on color images with 8-bits per channel except where mentioned otherwise. The list below is a small subset of [[CUVI_Features|100+ features]] in CUVI.<br />
<br />
{|<br />
|style="font-size:85%;"|<br />
<tabs><br />
<!-- Xavier NX Starts --><br />
<tab name="Xavier NX"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on Jetson Xavier NX<br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.29 <br />
|0.61<br />
|2.04<br />
|8.61<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.27<br />
|0.61<br />
|2.31<br />
|9.02<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|1.87<br />
|2.3<br />
|9.17<br />
|36.74<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|2.33<br />
|4.96<br />
|19.07<br />
|77.75<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.22<br />
|0.48<br />
|1.89<br />
|7.47<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.68<br />
|0.92<br />
|3.24<br />
|9.20<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.10<br />
|0.30<br />
|0.86<br />
|3.28<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.36<br />
|0.68<br />
|1.86<br />
|7.29<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.14<br />
|0.25<br />
|0.96<br />
|3.83<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|142.56<br />
|285.95<br />
|1103.14<br />
|4399.84<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.38<br />
|0.77<br />
|3.12<br />
|12.34<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.13<br />
|0.48<br />
|2.05<br />
|6.05<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.85<br />
|1.90<br />
|7.57<br />
|30.32 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.23<br />
|0.49<br />
|1.90<br />
|7.64<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.24<br />
|0.68<br />
|2.26<br />
|9.38<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|2.97<br />
|7.89<br />
|23.76<br />
|108.21<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|1.57<br />
|3.49<br />
|13.6<br />
|47.39<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|1.07<br />
|2.39<br />
|6.47<br />
|25.70<br />
|}<br />
</tab><br />
<!-- Xavier NX Ends--><br />
<!-- RTX 2060 Starts --><br />
<tab name="RTX 2060"><br />
{|class="wikitable"<br />
|+ style="caption-side:bottom; color:#e76700;"|''Kernel Time in milliseconds (ms) with CUVI v1.8.0 on RTX 2060 <br />
|-<br />
! Algorithm / Image Size<br />
! 720p<br />
! 1080p<br />
! 4k (3840x2160)<br />
! 8k (7680x4320)<br />
|-<br />
|-<br />
|[[Function:Add|add]] - 2 Images<br />
|0.06 <br />
|0.14 <br />
|0.51 <br />
|2.01<br />
|-<br />
|[[Function:ChannelMix|channelMix]]<br />
|0.07<br />
|0.14<br />
|0.55<br />
|2.25<br />
|-<br />
|[[Function:Demosaic|demosaic]]<br />
|0.24<br />
|0.53<br />
|2.10<br />
|8.10<br />
|-<br />
|[[Function:DemosaicDFPD|demosaicDFPD]]<br />
|0.52<br />
|1.22<br />
|4.53<br />
|18.1<br />
|-<br />
|[[Function:GammaCorrect|gammaCorrect]]<br />
|0.12<br />
|0.28<br />
|1.02<br />
|4.30<br />
|-<br />
|[[Function:HistEq|histEq]] - Single Channel<br />
|0.21<br />
|0.24<br />
|0.84<br />
|3.10<br />
|-<br />
|[[Function:LUT|LUT]]<br />
|0.03<br />
|0.08<br />
|0.29<br />
|1.20<br />
|-<br />
|[[Function:blackGammaLUT|blackGammaLUT]] <br />
|0.069<br />
|0.16<br />
|0.61<br />
|2.50<br />
|-<br />
|[[Function:RGB2Gray|rgb2gray]]<br />
|0.04<br />
|0.09<br />
|0.34<br />
|1.43<br />
|-<br />
|[[Function:FocusStack|focusStack]] - Stacking 5 Images<br />
|25.77<br />
|55.86<br />
|221.60<br />
|605.53<br />
|-<br />
|[[Function:BitConversion|bitConversion]] - From 8 to 16 bits<br />
|0.01<br />
|0.24<br />
|0.95<br />
|3.81<br />
|-<br />
|[[Function:Crop|crop]]<br />
|0.04<br />
|0.12<br />
|0.41<br />
|1.70<br />
|-<br />
|[[Function:Resize|resize]] - Scale=2.0<br />
|0.25<br />
|0.55<br />
|2.21<br />
|8.70 <br />
|-<br />
|[[Function:Rotate|rotate]] - Non Cropping, Angle = -3.76f<br />
|0.04<br />
|0.09<br />
|0.36<br />
|1.11<br />
|-<br />
|[[Function:WarpPerspective|warpPerspective]]<br />
|0.08<br />
|0.20<br />
|0.77<br />
|3.10<br />
|-<br />
|[[Function:ImageFilter|imageFilter]] - 5x5 floating point window<br />
|0.65<br />
|1.56<br />
|5.81<br />
|13.7<br />
|-<br />
|[[Function:UnderwaterFilter|underwaterFilter]]<br />
|0.53<br />
|1.10<br />
|4.00<br />
|15.2<br />
|-<br />
|[[Function:haarFwd|haarFwd]]<br />
|0.14<br />
|0.30<br />
|1.21<br />
|4.90<br />
|}<br />
</tab><br />
<!-- RTX 2060 Ends--><br />
</tabs><br />
|}<br />
<br />
==Color Pipeline==<br />
Let's take a typical color pipeline and see its performance on one of the least powerful GPU modules; Jetson Nano. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying look up tables, fpn removal and changing white balance. Next comes debayer followed by several further enhancements and a color space conversion to your desired format. This pipeline can perform in real-time on a decent entry level GPU. <br />
[[File:color_pipeline.png|250px|thumb|left|Color pipeline where each box represents a function]]</div>
Jawad