4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
1 | |
Создание изображения на stm32 с 16 битными градациями серого01.07.2021, 18:03. Показов 6344. Ответов 66
Необходимо средствами stm32f746 обработать массив данных, снятый с датчиков, преобразовав его в изображение.
Размер массва MxN примерно 64000 пикселей, это усредненное значение, которое будет задаваться. Т.е. по сути после извлечения данных с детекторов в ОЗУ мк будет находиться массив размером MxN из 16 битных чисел. Из форматов изображений, работающих с 16 bit grayscale я нашел только PNG и TIFF. Там еще есть что-то про BMP и RAW. В целом не особо критично какой будет формат, но ввиду того, что потом этот файл будет обрабатывать ПО на ПК, то желателен TIFF. Ну либо получить PNG, потом его преобразовать в TIFF, главное сохранить глубину цвета серого 16 бит. Полученный файл надо передать клиенту (браузер пк), мк - http сервер. Там его скачать. Я уже переискал, по-моему, все возможные варианты как это можно сделать. Тут изначально выбор где осуществлять конвертацию массива в файл: на строне мк или в браузере. По-хорошему делать это лучше в браузере, ввиду большого объема информации и ее обработки, но ничего толкового я не нашел для этого в javascript (страница написана на html и js, передача осуществляется при помощи AJAX по GET запросам). В основном там идут библиотеки для работы с уже созданными файлами, их обработки (pngjs, camvas-to-tiff, webgl). В общем средства для создания PNG или TIFF на js я не нашел. Поэтому начал искат возможность сделать это на мк. Тут вообще идея была изначально создать структуру этих форматов (PNG или TIFF) и дальше просто заполнять ее данными, но с их структурой я так и не разобрался. Поэтому так же начал искать библиотеки (libpng, libtiff, raw2tiff). Вот первые две очень интересные, документацию на них я нашел, а примеров использования практически нет. Ну и еще есть предположение, что это будет занимать достаточно большой объем ОЗУ, и просто не поместится в памяти мк. Там ОЗУ 320 КБ, но есть FreeRTOS и LWIP, которые занимают больше половины от этого. Поэтому возникли вопросы, может кто подскажет как решить данную задачу при помощи этих библиотек, ну либо каким другим способом? Буду рад любой идее, потому что уже перегуглил все по этой теме
0
|
01.07.2021, 18:03 | |
Ответы с готовыми решениями:
66
Преобразовать рисунок с градациями серого в бинарный Работа с 16-битными оттенками серого Битовые операции с 64 битными числами (STM32) Преобразование изображения в градации серого |
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|||||||||||
01.07.2021, 19:49 | 2 | ||||||||||
Создавай bmp в контроллере - это не сложно. Для проверки накидал генерацию 16-битного grayscale bmp под windows на Delphi:
Кликните здесь для просмотра всего текста
Затем создал html-страничку
1
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
01.07.2021, 19:58 [ТС] | 3 |
murderer, а есть пример как создать BMP на С в мк? Просто пока не совсем понимаю как происходит создание структуры и ее заполнение средствами мк, так чтобы потом это все можно было передать как файл
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
01.07.2021, 22:06 | 4 |
о как! А я в свое время накодил генерацию bmp в дельфях самостоятельно, не подозревая что заголовки лежат в "Windows" - то есть по сути, в (почти) любом Дельфёвом проекте...
Для ТС, конечно, придется еще погуглить на предмет Си-шных эквивалентов этих структур, но это не так и сложно найти. вот эту библиотеку смотрели? PS: вы для начала ответьте - что вам интереснее - копать создание картинок в Си или копать создание картинок в JS? В чем вы лучше разбираетесь?
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
02.07.2021, 05:59 [ТС] | 5 |
Voland_, эту библиотеку не находил. В заголовке темы ошибка, там должно быть "с 16 битными градациями серого", т.е. 65536 градаций. 8 битные абсолютно, ни в каком виде, совсем никак не подходят под задачу.
Нууу, мне интереснее сделать это средствами Си на мк, в программировании мк я лучше разбираюсь чем в js, но вообще выгоднее с позиции рерсоемкости решить задачу средствами js, т.е. в браузере пк, а мк чтобы занимался только накоплением и передачей данных, грузить на него сздание изображения будет не совсем рациональной затеей, но вся проблема в том, что js не представяет особо средств для создания 16 битного изображения, ну или я не нашел, хотя я уже все перерыл Добавлено через 3 минуты murderer, Voland_, Хотя может и на js можно сделать по аналогии с тем, что накидал выше murderer, но я не настолько владею js, вот только начал его использовать
0
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|
02.07.2021, 08:15 | 7 |
Тебе нужно добавить перед этим массивом две структуры - BITMAPFILEHEADER и BITMAPV5HEADER и получится bmp-файл. Чтобы порядок строк был правильным поле bV5Height должно содержать отрицательное значение высоты.
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
02.07.2021, 08:20 [ТС] | 8 |
murderer, кажется начинаю понимать, только вопрос: из массива данных array[0..65535]
bV5Width: 256; bV5Height: 256; я так понимаю потом при декодовании этого файла данные и будут разгребаться согласно этому размеру 256х256, почему тогда ?
0
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|
02.07.2021, 08:30 | 9 |
Если высота будет положительной то строки будут выводиться снизу-вверх, при отрицательном значении строки выводятся сверху-вниз. Во вложении два одинаковых bmp-файла, отличается только поле bV5Height. Ещё насколько я помню размер строки должен быть кратен 4 байтам (строка просто добивается нулями до нужного размера).
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
02.07.2021, 10:32 [ТС] | 10 | ||||||||||
murderer, инетерсно, тоже с этим сталкивался, когда выводил данные в canvas на html, начало координат левый верхний угол. Ну сейчас попробуем на stm32 это реализовать)
Добавлено через 1 час 59 минут murderer, создал структуру
0
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
||||||
02.07.2021, 10:55 | 11 | |||||
Мне кажется структуру tagBITMAPV5HEADER нужно описывать полностью, так как по значению поля bV5Size прикладное ПО определяет версию BMP. В обрезанном виде файл может не открыться.
Добавлено через 5 минут
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||
02.07.2021, 11:06 [ТС] | 12 | |||||
murderer, ну я смотрю по той же самой википедии, например
https://ru.wikipedia.org/wiki/... 1%80%D0%B0 Структура BITMAPFILEHEADER и BITMAPINFO (BITMAPV5HEADER) Ну да, верно ндо полностью заполнять, там в BITMAPV5HEADER больше параметров
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
02.07.2021, 14:21 [ТС] | 14 |
murderer, У Вас глубина цвета показытся 32, это разве не значит, что изображение RGB?
Добавлено через 1 час 26 минут murderer, Может я ошибаюсь, но помоему у Вас изображение все-таки RGBA, про grayscale ничего не могу найти в структуре. И еще вопрос, почему BI_BITFIELDS- это константа, равная 3? Откуда берется ее значение?
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
02.07.2021, 15:02 | 16 |
DmitryDDDD, кстати! А я вот, что-то сильно усомнился, что есть формат BMP 16-битной глубины цветности. На сегодня 32битный цвет - это ведь 888[RGB]+канал прозрачности. И другие комбинации 565, 444, 232 - для разных видов кодирования цвета не достигают желаемой вами глубины в 16бит. Поэтому, тут впору перепроверить вообще - что и в каком виде вы собираетесь получать и как отображать.
Добавлено через 2 минуты https://en.wikipedia.org/wiki/Grayscale
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
02.07.2021, 15:04 [ТС] | 17 |
murderer, Voland_,
Да вообще вроде есть, я знаю точно, что есть 16 битный TIFF, BMP вроде тоже.
Там вопрос будет с сжатием еще
0
|
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
02.07.2021, 15:05 | 18 |
Еще инфа. Так выходит, что PNG и TIFF - это популярные типы файлов. Остальные (кроме фотошопного) я и не слышал. Еще иногда фотики могут сохранять кадры в формате raw, но у меня был только 10ти битная глубина каждого оттенка цвета.
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
02.07.2021, 15:09 [ТС] | 19 |
Voland_, Raw точно нет, там формат не стандартизирован, я вообще удивлен, что такие трудности с тем, чтобы создать изображение из массива, с библиотеками тоже мало что находится подходящего
0
|
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
|
|
02.07.2021, 15:35 | 20 |
Это не документированная фича. В MSDN пишут
0
|
02.07.2021, 15:35 | |
02.07.2021, 15:35 | |
Помогаю со студенческими работами здесь
20
Преобразование изображения к оттенкам серого Сохранение изображения 16-бит оттенков серого Перевод в градации серого части изображения Как получить 3Д график из данных полученных из изображения в оттенках серого? Функция, которая каждую четную строку изображения переводит в градации серого цвета Разработайте функцию, которая каждую четную строку изображения переводит в градации серого цвета Создание PNG с 16 битной градацией серого Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |