RUVIDEO
Поделитесь видео 🙏

Android real time image processing : Floyd-Steinberg dithering : Java vs. C (Renderscript)

The Floyd-Steinberg (FS) algorithm (https://en.wikipedia.org/wiki/Floyd%E2%80%93Steinberg_dithering) is a method to reduce the number of colors in an image.

In this demo app the camera preview image (shown in the display's upper left corner) is converted to grayscale (shown below). The FS-algorithm then reduces the 256 gray values to ditherd, soleily black and white pixels, where the ratio of black/white pixels in an area represents the former gray value.

FS-dithering uses a serial algorithm which cannot be easily parallelized. Yet it benefits from Renderscript (using C language) instead of Java, even when running only one "serial task"
(whilst not using Renderscript´s parallel computing capabilities).

The FS algorithm uses a huge array to store information to each image pixel. To process a single image it takes about (imagewidth*imageheight*10) array accesses.

In Java, arrays are objects which are computationally expensive. Furthermore, Java performs a range check on every array access. This cannot be disabled.

In C, however, arrays are a pointer structures, the access is very fast. Usually there are no range checks.

This app compares a Java with a C implementation of the same (serial) FS-algorithm. Image size in both cases is 640 x 480 pixels.

Results:
Java : 9-10 FramesPerSecond (FPS)
C : 32-34 FramesPerSecond

Overall, the C version outperforms Java by a factor of about 3.5.
Regarding soleily the FS-algorithm, C beats Java by a factor of 6-7.

App created with Basic4Android.

Device : Nexus 7 (2013), JellyBean 4.3, not rooted.

Here is a tutorial how to start real time (live camera) image processing on Android using B4A (Basic4Android). It also includes
basic information how to use the RenderScript framework (parallel data processing on multi-core CPUs).

https://www.b4x.com/android/forum/threads/b4a_cartooncamera-real-time-image-processing-using-renderscript-intrinsics.82813 #content

Что делает видео по-настоящему запоминающимся? Наверное, та самая атмосфера, которая заставляет забыть о времени. Когда вы заходите на RUVIDEO, чтобы посмотреть онлайн «Android real time image processing : Floyd-Steinberg dithering : Java vs. C (Renderscript)», вы рассчитываете на нечто большее, чем просто загрузку плеера. И мы это понимаем. Контент такого уровня заслуживает того, чтобы его смотрели в HD 1080, без дрожания картинки и бесконечного буферизации.

Честно говоря, Rutube сегодня — это кладезь уникальных находок, которые часто теряются в общем шуме. Мы же вытаскиваем на поверхность самое интересное. Будь то динамичный экшн, глубокий разбор темы от любимого автора или просто уютное видео для настроения — всё это доступно здесь бесплатно и без лишних формальностей. Никаких «заполните анкету, чтобы продолжить». Только вы, ваш экран и качественный поток.

Если вас зацепило это видео, не забудьте взглянуть на похожие материалы в блоке справа. Мы откалибровали наши алгоритмы так, чтобы они подбирали контент не просто «по тегам», а по настроению и смыслу. Ведь в конечном итоге, онлайн-кинотеатр — это не склад файлов, а место, где каждый вечер можно найти свою историю. Приятного вам отдыха на RUVIDEO!

Видео взято из открытых источников Rutube. Если вы правообладатель, обратитесь к первоисточнику.