SlideShare uma empresa Scribd logo
1 de 117
Baixar para ler offline
EFFICIENT IMAGE PROCESSING
ON ANDROID

Nicolas Roard
EFFICIENT IMAGE PROCESSING
•

Works well on all hardware

•

Fast, ideally realtime interaction

•

Handles complex and flexible processing

•

Handles large images

•

Minimize memory usage
WE WANT TO HAVE OUR CAKE
AND EAT IT TOO
ANDROID KITKAT
PHOTO EDITOR
•

Non-destructive edits

•

Full-size images processing

•

Combine effects freely

•

Easy to use, yet powerful: grow with the user
NON-DESTRUCTIVE EDITS

•

Effects are modifiable or reversible without quality loss

•

Allow re-edits of processed images
RENDERSCRIPT (RS)

•

Cool thingy that let you do fast image processing
TIMELINE
3 VERSIONS, 10 MONTHS
4.2 - NOVEMBER 2012
•

Color FX (9 looks)

•

11 Borders

•

Geometry: Straighten, Rotate, Crop, Mirror

•

Filters & Tools
•

Autocolor, Exposure, Vignette, Contrast, Shadows, Vibrance,
Sharpness (RS-based), Curves, Hue, Saturation, BW Filter

•

Non-destructive edits (in the editor -- save create a copy)

•

Exposed history
G+ EDITOR - MAY 2013

•

RenderScript implementations of Snapseed filters

•

Frames, Film, Drama, Retrolux

•

Non-destructive

•

Cloud-based (local processing only used for caching and UI
interactions)
4.3 - JULY 2013
•

Move to RenderScript

•

New 16 image-based borders (ported from Snapseed, RS-based)

•

Filters & Tools
•
•

•

Highlights, Improved Vignette
Local adjustment (ported from Snapseed, RS-based)

New Tablet UI, refined UI, introduction of the state panel instead of
the history panel
4.4 - SEPTEMBER 2013
•

Filters & Tools
•

Custom borders, Drawing tool, negative, posterize

•

RS filters: Graduated filter, Vignette, per channel saturation,
sharpness/structure

•

Refined UI (animations, etc.)

•

Pinch to zoom enabled (full-res zoom)

•

Re-edits enabled

•

Background save service, export, print support
DEMO
SOME ADDITIONAL INFOS

•

Phone and Tablet UI

•

Filters in C & RenderScript

•

Works on Full Size images -- largest tried was a 278MP image on a
Nexus 7 2nd gen. Limited by available RAM.

•

Nearly all of the editor is in AOSP!
IMAGE PROCESSING
PIPELINE

Original
Image
PIPELINE

Original
Image

Filter
PIPELINE

Original
Image

Filter

Processed
Image
IMAGE PROCESSING

•

In Java

•

In native code (JNI calls to C/C++)

•

In OpenGLES2

•

RenderScript
JAVA

•

Use getPixel()

•

Use getPixels()

•

Use copyPixelsToBuffer() [premultiplied]

•

GC calls. GC calls everywhere.
NATIVE CODE
•

Pass a Bitmap through JNI to C/C++
•

Quite fast & pretty easy to work with (pointer to the bitmap -- and
no GC!)

•

JNI / Native can be fastidious

•

Handling different CPU architectures can be an issue

•

Optimizations can be complicated

•

JNI management
OPENGL ES 2.0
•

Fast -- can write interactive processing

•

Hard to ensure the shaders will perform well on all devices

•

Limited in size (max texture size...)

•

Needs adhoc shaders, i.e. fixed pipelines.

•

Expensive to retrieve processed image
RENDERSCRIPT
“RENDERSCRIPT IS A FRAMEWORK FOR RUNNING
COMPUTATIONALLY INTENSIVE TASKS AT HIGH PERFORMANCE ON
ANDROID. RENDERSCRIPT IS PRIMARILY ORIENTED FOR USE WITH
DATA-PARALLEL COMPUTATION, ALTHOUGH SERIAL
COMPUTATIONALLY INTENSIVE WORKLOADS CAN BENEFIT AS WELL.”
•

Write “kernels” in a C99-like language with vector
extensions and useful intrinsics

•

RenderScript executes them in parallel, on the GPU or
CPU

•

Java used to manage lifetime of objects/allocations and
control of execution

•

Portability
RENDERSCRIPT
•

Fast -- through LLVM optimizations and Parallelization

•

Supports CPU / GPU

•

Compatibility Library

•

Easy to offload to the background

•

Pretty easy to write
RENDERSCRIPT

•

Cannot allocate memory from kernels, need to do it from outside

•

RenderScript can be called from Java or from Native

•

Compatibility library!
HOW?

•

Optimized Math library

•

Optimizations on the device

•

Easier to read & maintain (vector math library helps)
ALLOCATIONS

•

Bound to Scripts

•

Can be bound to SurfaceTexture (producer & consumer)

•

Can share memory between Allocation and Bitmap
HOW TO USE IT
1. SCRIPT
#pragma version(1)
#pragma rs java_package_name(com.example.rsdemo)
uchar4 __attribute__((kernel)) color(uchar4 in) {
return in;
}
2. CREATE CONTEXT

RenderScript mRS = RenderScript.create(mContext);
ScriptC_filter filter = new ScriptC_filter(mRS,
mResources, R.raw.filter);
3. LOAD BITMAP
Bitmap bitmapIn = BitmapFactory.decodeResource(
getResources(),
R.drawable.monumentvalley);
Bitmap bitmapOut = bitmapIn.copy(bitmapIn.getConfig(),
true);
4. CREATE ALLOCATIONS

Allocation in = Allocation.createFromBitmap(mRS, bitmapIn,
Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT
| Allocation.USAGE_SHARED);
Allocation out = Allocation.createTyped(mRS, in.getType());
5. APPLY THE SCRIPT

filter.forEach_color(in, out);
out.copyTo(bitmapOut);
SCRIPT INTRINSICS
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(mRS,
Element.U8_4(mRS));
blur.setRadius(25.f);
blur.setInput(in);
blur.forEach(in);
READY TO USE
•

ScriptIntrinsic3DLUT

•

ScriptIntrinsicBlend

•

ScriptIntrinsicBlur

•

ScriptIntrinsicColorMatrix

•

ScriptIntrinsicConvolve3x3

•

ScriptIntrinsicConvolve5x5

•

ScriptIntrinsicLUT

•

ScriptIntrinsicYuvToRGB

•

ScriptGroup
PAINT IT BLACK
(OR GRAY)
SCRIPT

uchar4 __attribute__((kernel)) color(uchar4 in) {
return in;
}
SCRIPT

uchar4 __attribute__((kernel)) grey(uchar4 in) {
in.g = in.r;
in.b = in.r;
return in;
}
SCRIPT

uchar4 __attribute__((kernel)) grey(uchar4 in) {
in.gb = in.r;
return in;
}
NDK
void Java_com_example_rsdemo_ProcessImage_processBitmap(JNIEnv* env,
jobject this, jobject bitmap,
jint width, jint height) {
	 unsigned char* rgb = 0;
	 AndroidBitmap_lockPixels(env, bitmap, (void**) &rgb);
	 int len = width * height * 4;
	 int i;
	 for (i = 0; i < len; i+=4) {
	 	 int red = rgb[i];
	 	 rgb[i+1] = red;
	 	 rgb[i+2] = red;
	 }
	 AndroidBitmap_unlockPixels(env, bitmap);
}
LOCAL EFFECT
SCRIPT

uchar4 __attribute__((kernel)) grey(uchar4 in) {
in.g = in.r;
in.b = in.r;
return in;
}
SCRIPT

uchar4 __attribute__((kernel)) grey1(uchar4 in,
uint32_t x, uint32_t y) {
in.g = in.r;
in.b = in.r;
return in;
}
SCRIPT
uchar4 __attribute__((kernel)) grey1(uchar4 in,
uint32_t x, uint32_t y) {
float range = (float) x / width;
uint32_t grey = (1 - range) * in.r;
in.r = grey;
in.g = grey;
in.b = grey;
return in;
}
SCRIPT
uchar4 __attribute__((kernel)) grey1(uchar4 in,
uint32_t x, uint32_t y) {
float range = (float) x / width;
uint32_t grey = (1 - range) * in.r;
in.r = grey;
in.g = grey;
in.b = grey;
return in;
}
SCRIPT
uchar4 __attribute__((kernel)) grey2(uchar4 in,
uint32_t x, uint32_t y) {
float range = (float) x / width;
uint32_t grey = (1 - range) * in.r;
in.r = (in.r * range) + grey;
in.g = (in.g * range) + grey;
in.b = (in.b * range) + grey;
return in;
}
SCRIPT
uchar4 __attribute__((kernel)) grey3(uchar4 in,
uint32_t x, uint32_t y) {
float range = (float) x / width;
float4 pixel = rsUnpackColor8888(in);
float grey = (1 - range) * pixel.r;
pixel.r = pixel.r * range + grey;
pixel.g = pixel.g * range + grey;
pixel.b = pixel.b * range + grey;
return rsPackColorTo8888(
clamp(pixel, 0.f, 1.0f));
}
SCRIPT
uchar4 __attribute__((kernel)) grey4(uchar4 in,
uint32_t x, uint32_t y) {
float range = (float) x / width;
float4 pixel = rsUnpackColor8888(in);
float grey = (1 - range) * pixel.r;
pixel.rgb = pixel.rgb * range + grey;
return rsPackColorTo8888(
clamp(pixel, 0.f, 1.0f));
}
EXAMPLE: BLOOM

•

Select the bright pixels

•

Blur the result

•

Add the blurred bright pixels back to the image
WITH JAVA
private void brightPass(int[] pixels, int width, int height) {
int threshold = (int) (brightnessThreshold * 255);
int r;
int g;
int b;
int luminance;
int[] luminanceData = new int[3 * 256];
// pre-computations
for (int i = 0; i <
luminanceData[i
luminanceData[i
luminanceData[i
}

for conversion from RGB to YCC
luminanceData.length; i += 3) {
] = (int) (i * 0.2125f);
+ 1] = (int) (i * 0.7154f);
+ 2] = (int) (i * 0.0721f);
int index = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int pixel = pixels[index];
// unpack the pixel's components
r = pixel >> 16 & 0xFF;
g = pixel >> 8 & 0xFF;
b = pixel
& 0xFF;
// compute the luminance
luminance = luminanceData[r * 3] + luminanceData[g * 3 + 1] +
luminanceData[b * 3 + 2];
// apply the treshold to select the brightest pixels
luminance = Math.max(0, luminance - threshold);
int sign = (int) Math.signum(luminance);
// pack the components in a single pixel
pixels[index] = 0xFF000000 | (r * sign) < < 16 |
(g * sign) << 8 | (b * sign);
index++;
}
}
}
WITH GL SHADER
uniform sampler2D baseImage;
uniform float brightPassThreshold;
void main(void) {
vec3 luminanceVector = vec3(0.2125, 0.7154, 0.0721);
vec4 sample = texture2D(baseImage, gl_TexCoord[0].st);
float luminance = dot(luminanceVector, sample.rgb);
luminance = max(0.0, luminance - brightPassThreshold);
sample.rgb *= sign(luminance);
sample.a = 1.0;
gl_FragColor = sample;
}
WITH RENDERSCRIPT
float brightPassThreshold;
uchar4 __attribute__((kernel)) brightPass(uchar4 in) {
float3 luminanceVector = { 0.2125, 0.7154, 0.0721 };
float4 pixel = rsUnpackColor8888(in);
float luminance = dot(luminanceVector, pixel.rgb);
luminance = max(0.0f, luminance - brightPassThreshold);
pixel.rgb *= sign(luminance);
pixel.a = 1.0;
return rsPackColorTo8888(clamp(pixel, 0.f, 1.0f));
}
JAVA-SIDE
ScriptIntrinsicBlur blur =
ScriptIntrinsicBlur.create(mRS, Element.U8_4(mRS));
ScriptIntrinsicBlend blend =
ScriptIntrinsicBlend.create(mRS, Element.U8_4(mRS));
filter.set_brightPassThreshold(0.15f);
filter.forEach_brightPass(in, out);
blur.setRadius(25.f);
blur.setInput(out);
blur.forEach(out);
blend.forEachAdd(in, out);
out.copyTo(bitmapOut);
WORKING WELL EVERYWHERE
WORKING WELL ON ALL
HARDWARE
•

Architect for the worst

•

Scale with the device capabilities
•

Screen size / dpi

•

Available memory

•

Available CPU / GPU

•

Think about what is a downgraded experience
LOADING
•

Load in the background
•

•

AsyncTask, or use a background thread

Bitmaps loading
•

query the size

•

inSampleSize

•

reuseBitmap

•

BitmapRegionDecoder
QUERY THE SIZE
BitmapFactory.Options options =
new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(
getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
INSAMPLESIZE

•

Only load what you need

•

needs to be a power of two, so for a 2048x2048 image,
•

insamplesize=2

=> 1024x1024 image

•

insamplesize=4 => 512x512 image
CALCULATE INSAMPLESIZE
if (bounds.width() > destination.width()) {
int sampleSize = 1;
int w = bounds.width();
while (w > destination.width()) {
sampleSize *= 2;
w /= sampleSize;
}
options.inSampleSize = sampleSize;
}
REUSE BITMAP
BitmapFactory.Options options;
(...)
Bitmap inBitmap = ...
(...)
options.inBitmap = inBitmap;

API level 11 (Android 3.0)
Before API level 19 (Android 4.4) only same size
BITMAP REGIONDECODER
InputStream is = ...
BitmapRegionDecoder decoder =
BitmapRegionDecoder.newInstance(is, false);
Rect imageBounds = ...
Bitmap bitmap =
decoder.decodeRegion(imageBounds, options);

API level 11 (Android 3.0)
PIPELINE
PIPELINE

•

Run in a background service (used when saving too)

•

Mix C, RenderScript, java filtering (canvas draw)

•

multiple pipelines in parallel (direct preview, highres, icons, full res,
geometry, saving)
FLEXIBLE PROCESSING
•

Unbounded pipeline

•

No fixed order

•

Complex filters
•

Geometry-based

•

Global

•

Local
FILTER TYPES
Color Fx

Geometry

*

Borders

Color
transforms

Crop

Contrast

Image-based

Straighten

Saturation

Parametric

Rotate

Local

Mirror

Vignette
Vintage

Instant

Washout

X-Process

COLOR FX - 3D LUT
CACHING
•

Cache RS scripts, allocations

•

Cache original bitmaps

•

Aggressively destroy/recycle resources in filters to keep memory low

•

If possible, filters should process the input bitmap directly

•

N-1 cache
MEMORY USAGE

•

Bitmap cache heavily reusing bitmaps

•

LruCache class (available in support lib too)

•

Pick image sizes depending on the device resolution / DPI

•

Have a path ready for a downgraded experience
DEVICE CAPABILITIES
•

Ask the system
•

Runtime.getRuntime().maxMemory()

•

New isLowRamDevice() API

•

Handles low-memory signals

•

Handles java.lang.OutOfMemory exceptions
PIPELINE CACHE

Original
Image
PIPELINE CACHE

Original
Image

Filter

Processed
Image
REALISTICALLY...

Original
Image
REALISTICALLY...

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
PROCESSING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
PROCESSING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
PROCESSING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

Original
Image

Filter

Filter

Filter

Filter

Processed
Image
N-1 CACHING

•

No silver bullet

•

Only really useful when the user manipulates the last filters of the
pipeline...

•

...but this is after all the more common scenario!
REALTIME INTERACTION
REALTIME INTERACTION
•

Background processing

•

Minimize allocations -- Careful with Garbage Collection!

•

Optimized filters, RenderScript helps

•

Caching in the pipeline

•

Low/High resolution preview
PREVIEW SYSTEM

Bitmap

Bitmap

Bitmap

Preset

Preset

Preset

UI Thread

Processing Thread
PREVIEW SYSTEM

Bitmap

Bitmap

Bitmap

Preset

Preset

Preset

UI Thread

Processing Thread
PREVIEW

Continuous
preview
High-res
preview

Full resolution
PREVIEW SYSTEM
Low-res preview

Request
High-res preview

Full-res preview

If new request, delay more
HOW TO CHEAT

•

The triple-buffer preview can have a low resolution

•

The UI elements and controls are animated and manipulated at 60 fps
on the UI thread

•

The rendering pipeline can (and needs to) be interrupted
INTERRUPTION IN
RENDERSCRIPT
LaunchOptions options = new LaunchOptions();
options.setX(xStart, xEnd);
options.setY(yStart, yEnd);
mScript.forEach_vignette(in, out, options);
LaunchOptions options = new LaunchOptions();
boolean even = true;
int tile = 128;
int height = bitmapIn.getHeight();
int width = bitmapIn.getWidth();
for (int yStart = 0; yStart < height; yStart += tile) {
for (int xStart = 0; xStart < width; xStart += tile) {
int xEnd = xStart + tile;
int yEnd = yStart + tile;
options.setX(xStart, xEnd);
options.setY(yStart, yEnd);
if (even) {
filter.forEach_grey(in, out, options);
} else {
filter.forEach_color(in, out, options);
}
even = !even;
}
}
FULL RESOLUTION PREVIEW
FULL RESOLUTION
PREVIEW
•

Ideally, we should use a tile-based rendering

•

At the moment, we use BitmapFactory region decoder instead

•

Filters need to be able to handle partial regions
•

future payoff: streaming save
FUTURE
FUTURE -- IN THE PHOTO
EDITOR
•

Merging filters
•
•

•

RenderScript
At the pipeline level (color cubes...)

Streaming saving
•

Some code is there (AOSP), but not used
FUTURE -- IN ANDROID
FRAMEWORK
•

TileView

•

Adding filtering pipeline in android framework

•

Image loader improvements

•

RAW support? Color correction?
13223x5598
70MP image
~60 tiles, ~15Mb
13223x5598
70MP image
~60 tiles, ~15Mb
TILEVIEW
TileView

TileGrid

Tile

TileViewAdapter

ImageTileViewAdapter

TileCache

TestTileViewAdapter
TILEVIEW ADAPTER

public interface TileViewAdapter {
public int getTileSize();
public int getContentWidth();
public int getContentHeight();
public void onPaint(float scale,
float dx, float dy, Bitmap bitmap);
public Bitmap getFullImage(int max);
void setDebug(boolean debug);
}
QUESTIONS, SUGGESTIONS?

•

RenderScript documentation:
•

•

http://developer.android.com/guide/topics/renderscript/
compute.html

contact: nicolasroard@google.com

Mais conteúdo relacionado

Mais procurados

Five android architecture
Five android architectureFive android architecture
Five android architectureTomislav Homan
 
Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Tomáš Kypta
 
Get an Android tutorial for beginners
Get an Android tutorial for beginnersGet an Android tutorial for beginners
Get an Android tutorial for beginnersJavaTpoint.Com
 
Android accessibility
Android accessibilityAndroid accessibility
Android accessibilityPuneet Kumar
 
Multithreading in Android
Multithreading in AndroidMultithreading in Android
Multithreading in Androidcoolmirza143
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Tomáš Kypta
 
Android tutorial
Android tutorialAndroid tutorial
Android tutorialmaster760
 
Intel XDK in Brief
Intel XDK in BriefIntel XDK in Brief
Intel XDK in BriefCamilo Corea
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopJava Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopKasun Dananjaya Delgolla
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android DevelopmentCan Elmas
 
Android Development Workshop
Android Development WorkshopAndroid Development Workshop
Android Development WorkshopPeter Robinett
 
Android Development
Android DevelopmentAndroid Development
Android Developmentmclougm4
 
Android Programming Basic
Android Programming BasicAndroid Programming Basic
Android Programming BasicDuy Do Phan
 
Android application development workshop day1
Android application development workshop   day1Android application development workshop   day1
Android application development workshop day1Borhan Otour
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android DevelopmentSander Alberink
 
Android Basic Tutorial
Android Basic TutorialAndroid Basic Tutorial
Android Basic TutorialSmartmonk
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentanistar sung
 
Introduction to Android Development Part 1
Introduction to Android Development Part 1Introduction to Android Development Part 1
Introduction to Android Development Part 1Kainda Kiniel Daka
 
Application Development - Overview on Android OS
Application Development - Overview on Android OSApplication Development - Overview on Android OS
Application Development - Overview on Android OSPankaj Maheshwari
 

Mais procurados (20)

Sikuli script
Sikuli scriptSikuli script
Sikuli script
 
Five android architecture
Five android architectureFive android architecture
Five android architecture
 
Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014Android development - the basics, MFF UK, 2014
Android development - the basics, MFF UK, 2014
 
Get an Android tutorial for beginners
Get an Android tutorial for beginnersGet an Android tutorial for beginners
Get an Android tutorial for beginners
 
Android accessibility
Android accessibilityAndroid accessibility
Android accessibility
 
Multithreading in Android
Multithreading in AndroidMultithreading in Android
Multithreading in Android
 
Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013Android development - the basics, MFF UK, 2013
Android development - the basics, MFF UK, 2013
 
Android tutorial
Android tutorialAndroid tutorial
Android tutorial
 
Intel XDK in Brief
Intel XDK in BriefIntel XDK in Brief
Intel XDK in Brief
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopJava Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
Android Development Workshop
Android Development WorkshopAndroid Development Workshop
Android Development Workshop
 
Android Development
Android DevelopmentAndroid Development
Android Development
 
Android Programming Basic
Android Programming BasicAndroid Programming Basic
Android Programming Basic
 
Android application development workshop day1
Android application development workshop   day1Android application development workshop   day1
Android application development workshop day1
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
Android Basic Tutorial
Android Basic TutorialAndroid Basic Tutorial
Android Basic Tutorial
 
MOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app developmentMOPCON 2014 - Best software architecture in app development
MOPCON 2014 - Best software architecture in app development
 
Introduction to Android Development Part 1
Introduction to Android Development Part 1Introduction to Android Development Part 1
Introduction to Android Development Part 1
 
Application Development - Overview on Android OS
Application Development - Overview on Android OSApplication Development - Overview on Android OS
Application Development - Overview on Android OS
 

Semelhante a Efficient Image Processing - Nicolas Roard

Dynamic sorting algorithm vizualizer.pdf
Dynamic sorting algorithm vizualizer.pdfDynamic sorting algorithm vizualizer.pdf
Dynamic sorting algorithm vizualizer.pdfAgneshShetty
 
02 direct3 d_pipeline
02 direct3 d_pipeline02 direct3 d_pipeline
02 direct3 d_pipelineGirish Ghate
 
Go native benchmark test su dispositivi x86: java, ndk, ipp e tbb
Go native  benchmark test su dispositivi x86: java, ndk, ipp e tbbGo native  benchmark test su dispositivi x86: java, ndk, ipp e tbb
Go native benchmark test su dispositivi x86: java, ndk, ipp e tbbJooinK
 
The next generation of GPU APIs for Game Engines
The next generation of GPU APIs for Game EnginesThe next generation of GPU APIs for Game Engines
The next generation of GPU APIs for Game EnginesPooya Eimandar
 
Video Terminal Evolution and The Future of Browsers
Video Terminal Evolution and The Future of BrowsersVideo Terminal Evolution and The Future of Browsers
Video Terminal Evolution and The Future of BrowsersThomas Walker Lynch
 
Future Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsFuture Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsElectronic Arts / DICE
 
Hpg2011 papers kazakov
Hpg2011 papers kazakovHpg2011 papers kazakov
Hpg2011 papers kazakovmistercteam
 
Image processing for robotics
Image processing for roboticsImage processing for robotics
Image processing for roboticsSALAAMCHAUS
 
Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill) Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill) Jean-Philippe Doiron
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicschangehee lee
 
Computer graphics
Computer graphics Computer graphics
Computer graphics shafiq sangi
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I💻 Anton Gerdelan
 
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile GamesUnreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile GamesEpic Games China
 
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Lviv Startup Club
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computingArka Ghosh
 
Introduction of openGL
Introduction  of openGLIntroduction  of openGL
Introduction of openGLGary Yeh
 

Semelhante a Efficient Image Processing - Nicolas Roard (20)

Dynamic sorting algorithm vizualizer.pdf
Dynamic sorting algorithm vizualizer.pdfDynamic sorting algorithm vizualizer.pdf
Dynamic sorting algorithm vizualizer.pdf
 
2D graphics
2D graphics2D graphics
2D graphics
 
02 direct3 d_pipeline
02 direct3 d_pipeline02 direct3 d_pipeline
02 direct3 d_pipeline
 
Go native benchmark test su dispositivi x86: java, ndk, ipp e tbb
Go native  benchmark test su dispositivi x86: java, ndk, ipp e tbbGo native  benchmark test su dispositivi x86: java, ndk, ipp e tbb
Go native benchmark test su dispositivi x86: java, ndk, ipp e tbb
 
The next generation of GPU APIs for Game Engines
The next generation of GPU APIs for Game EnginesThe next generation of GPU APIs for Game Engines
The next generation of GPU APIs for Game Engines
 
Video Terminal Evolution and The Future of Browsers
Video Terminal Evolution and The Future of BrowsersVideo Terminal Evolution and The Future of Browsers
Video Terminal Evolution and The Future of Browsers
 
Open gl
Open glOpen gl
Open gl
 
Future Directions for Compute-for-Graphics
Future Directions for Compute-for-GraphicsFuture Directions for Compute-for-Graphics
Future Directions for Compute-for-Graphics
 
Hpg2011 papers kazakov
Hpg2011 papers kazakovHpg2011 papers kazakov
Hpg2011 papers kazakov
 
Image processing for robotics
Image processing for roboticsImage processing for robotics
Image processing for robotics
 
Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill) Developing Next-Generation Games with Stage3D (Molehill)
Developing Next-Generation Games with Stage3D (Molehill)
 
Smedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphicsSmedberg niklas bringing_aaa_graphics
Smedberg niklas bringing_aaa_graphics
 
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
 
IMAGE PROCESSING
IMAGE PROCESSINGIMAGE PROCESSING
IMAGE PROCESSING
 
Computer graphics
Computer graphics Computer graphics
Computer graphics
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I
 
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile GamesUnreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
Unreal Open Day 2017 UE4 for Mobile: The Future of High Quality Mobile Games
 
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
 
Vpu technology &gpgpu computing
Vpu technology &gpgpu computingVpu technology &gpgpu computing
Vpu technology &gpgpu computing
 
Introduction of openGL
Introduction  of openGLIntroduction  of openGL
Introduction of openGL
 

Mais de Paris Android User Group

Workshop: building your mobile backend with Parse - Droidcon Paris2014
Workshop: building your mobile backend with Parse - Droidcon Paris2014Workshop: building your mobile backend with Parse - Droidcon Paris2014
Workshop: building your mobile backend with Parse - Droidcon Paris2014Paris Android User Group
 
Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Paris Android User Group
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014Paris Android User Group
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Paris Android User Group
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Paris Android User Group
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Paris Android User Group
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Paris Android User Group
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Paris Android User Group
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Paris Android User Group
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014Paris Android User Group
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Paris Android User Group
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Paris Android User Group
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Paris Android User Group
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Paris Android User Group
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Paris Android User Group
 
Projet aad v2 gefco - DroidCon Paris 18 june 2013
Projet aad v2   gefco  - DroidCon Paris 18 june 2013Projet aad v2   gefco  - DroidCon Paris 18 june 2013
Projet aad v2 gefco - DroidCon Paris 18 june 2013Paris Android User Group
 

Mais de Paris Android User Group (20)

Workshop: building your mobile backend with Parse - Droidcon Paris2014
Workshop: building your mobile backend with Parse - Droidcon Paris2014Workshop: building your mobile backend with Parse - Droidcon Paris2014
Workshop: building your mobile backend with Parse - Droidcon Paris2014
 
Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014
 
Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
 
Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014
 
Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
 
Build a user experience by Eyal Lezmy
Build a user experience by Eyal LezmyBuild a user experience by Eyal Lezmy
Build a user experience by Eyal Lezmy
 
Projet aad v2 gefco - DroidCon Paris 18 june 2013
Projet aad v2   gefco  - DroidCon Paris 18 june 2013Projet aad v2   gefco  - DroidCon Paris 18 june 2013
Projet aad v2 gefco - DroidCon Paris 18 june 2013
 

Último

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 

Último (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Efficient Image Processing - Nicolas Roard