Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/33: Рейтинг темы: голосов - 33, средняя оценка - 4.73
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511

Создание изображения на stm32 с 16 битными градациями серого

01.07.2021, 18:03. Показов 7615. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2021, 18:03
Ответы с готовыми решениями:

Преобразовать рисунок с градациями серого в бинарный
Яркости пикселей рисунка закодированы числами от 0 до 255 в виде матрицы. Преобразовать рисунок в черно-белый по следующему алгоритму:...

Работа с 16-битными оттенками серого
Здравствуйте. Какие средства в C++ позволяют работать с 16-битными оттенками серого?

Битовые операции с 64 битными числами (STM32)
Доброго Вам всем вечера, пытаюсь прочитать значение переменной unsigned long long при помощи битовой операции unsigned long long...

66
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
02.07.2021, 15:40  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от murderer Посмотреть сообщение
Это не документированная фича
Это катастрофа
Скорее всего такой файл в TIFF не получится перевести, либо переведется, но он не будет 16 битным grayscale, и тогда ПО для дальнейшей обработки файла не сможет с ним нормально работать
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
02.07.2021, 17:26
Читаю спецификацию TIFF, раздел "Grayscale images->Required Fields for Grayscale Images":
TagNameDecimalHexTypeValue
BitsPerSample258102SHORT4 or 8
Похоже, что оффициально поддерживаются только 4 и 8-битные изображения.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
02.07.2021, 18:40
Цитата Сообщение от murderer Посмотреть сообщение
Похоже, что оффициально поддерживаются только 4 и 8-битные изображения.
в том же спеке есть еще описание "SamplesPerPixel", что позволяет записать больше 3х байт на пиксель. Похоже, этим пользуются для задания бОльшего количества данных о цвете...
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
ПО для дальнейшей обработки файла не сможет с ним нормально работать
...обрабатывайте два "кадра" по 256 градаций. Один кадр будет содержать старшее слово градации каждого пикселя, другой кадр - младшее слово каждого пикселя. Но вообще - "обработка" в JS - это "тот еще" изврат. Используйте тогда уж Python и его нативный подход для работы с сокетами. Это проще, стабильнее, и лучше будет работать.
0
Модератор
 Аватар для Curry
5164 / 3519 / 536
Регистрация: 01.06.2013
Сообщений: 7,656
Записей в блоге: 9
02.07.2021, 23:16
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
Тут изначально выбор где осуществлять конвертацию массива в файл: на строне мк или в браузере. По-хорошему делать это лучше в браузере, ввиду большого объема информации
Вот именно. Передавайте данные как числа javascript, а уж им, в браузере, на canvas рисуйте.
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
ничего толкового я не нашел для этого в javascript
В лесу лесу не нашли.
В этом разделе это как бы оффтоп, но
https://developer.mozilla.org/... ith_canvas
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
03.07.2021, 00:00
Curry, приветики) на stm32 перешли?
0
03.07.2021, 01:44

Не по теме:

Цитата Сообщение от pcmax Посмотреть сообщение
на stm32 перешли?
Разные проекты есть. Сейчас на STM32F091, три UART-а с автоопределением частот. Для автоопределения пришлось свой обработчик прерываний писать, с HAL-овским не получилось. Заканчиваю проект.

0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 06:44
Цитата Сообщение от Curry Посмотреть сообщение
в браузере, на canvas рисуйте
Как я понял задача не отрисовать, а передать файл в готовое ПО для обработки. Canvas не поддерживает 16-бит.
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 06:55  [ТС]
Цитата Сообщение от Curry Посмотреть сообщение
Вот именно. Передавайте данные как числа javascript, а уж им, в браузере, на canvas рисуйте.
Так и делаю, получаю 8 битный PNG
Цитата Сообщение от murderer Посмотреть сообщение
Как я понял задача не отрисовать, а передать файл в готовое ПО для обработки. Canvas не поддерживает 16-бит.
Абсолютно верно
Надо как-то сформировать структуру TIFF, заполнить ее и записать в файл, который потом скачать из браузера
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 09:33
Попробовал сгенерить tif в FASM
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
format binary as 'tif'
dd 2A4949h
dd 8
dw 11            ;количество тэгов в каталоге
dw 256,3         ;ширина
dd 1,256
dw 257,3         ;высота
dd 1,256
dw 258,3         ;глубина цвета
dd 1,16
dw 259,3         ;сжатие
dd 1,1
dw 262,3         ;цветовая модель
dd 1,0
dw 273,4         ;смещения стрипов
dd 1,stripofs
dw 278,4         ;высоты стрипов
dd 1,stripheight
dw 279,4         ;размеры стрипов в байтах
dd 1,striplen
dw 282,5         ;горизонтальный размер
dd 1,Xres
dw 282,5         ;вертикальный размер
dd 1,Yres
dw 296,3         ;единица измерения размера
dd 1,2
dd 0             ;смещение следующего каталога
 
Xres        dd 72,1
Yres        dd 72,1
stripofs    dd rawdata
stripheight dd 256
striplen    dd 65536*2
 
rawdata:
repeat 65536
  dw %-1
end repeat
Но что-то пошло не так - xnview неправильно отображает такую картинку, CorelDraw выдаёт сообщение "неправильное значение тэга). TIF во вложении.
Вложения
Тип файла: rar 1.rar (472 байт, 7 просмотров)
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 10:39  [ТС]
murderer, Почему у Вас заголовок такой?
Там же вроде должно быть
49 49 2A 00 или 4D 4D 00 2A
https://ru.wikipedia.org/wiki/TIFF
Откуда брали структуру и значения для ее заполнения? Поэкспериментирую с заполнением
Там насколько я понял по описанию формата, идет заголовок (IFH), который может быть только 2х видов, которые указал выше, потом описание тега (IFD), вот там уже все параметры описываются, сам тег (массив данных изображения). Т.е. 3 части, 2 из которых заголовки и одна это данные. С первой воде понятно, с третьей тоже, вот вторую правильно заполнить и может что-то да получится, но в той же wiki нет толкового описания структуры и как ее заполнять

Добавлено через 27 минут
Вот этот файл вроде неплохой
https://www.awaresystems.be/im... /TIFF6.pdf
Вот тут тоже вроде что-то есть https://www.awaresystems.be/im... ftags.html
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 10:51
Вот так получается правильный файл (насчёт тэга ExtraSamples не уверен - работает и без него). Файл создавал по спецификации.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
format binary as 'tif'
dd 2A4949h
dd 8
dw 13            ;количество тэгов в каталоге
dw 256,3         ;ширина
dd 1,256
dw 257,3         ;высота
dd 1,256
dw 258,3         ;глубина цвета
dd 1,16
dw 259,3         ;сжатие
dd 1,1
dw 262,3         ;цветовая модель
dd 1,0
dw 273,4         ;смещения стрипов
dd 1,rawdata
dw 277,3         ;количество компонентов на пиксель
dd 1,1
dw 278,4         ;высоты стрипов
dd 1,256
dw 279,4         ;размеры стрипов в байтах
dd 1,65536*2
dw 282,5         ;горизонтальный размер
dd 1,Xres
dw 283,5         ;вертикальный размер
dd 1,Yres
dw 296,3         ;единица измерения размера
dd 1,2
dw 338,3         ;количество дополнительных компонентов в пикселе
dd 1,1
dd 0             ;смещение следующего каталога
 
Xres        dd 72,1
Yres        dd 72,1
 
rawdata:
repeat 65536
  dw %-1
end repeat
Добавлено через 1 минуту
ссылка на FASM - https://flatassembler.net/download.php
1
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 11:08  [ТС]
murderer, эх, еще и на ассемблере
А скиньте ссылку какой спецификацией пользовались? Я хоть попробую перевести это все на Си или JS, да вопросизвести Ваш успех, скорее всего в каком-нибудь блокноте)

Добавлено через 6 минут
и все-таки, почему заголовок 2А49494, а не 49 49 2A 00 как в специцифкации?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 11:12
эх, еще и на ассемблере
Так намного проще - меньше кода писать и смещения легко считаются.
А скиньте ссылку какой спецификацией пользовались?
Я качал с сайта adobe - https://www.adobe.io/open/standards/TIFF.html

Добавлено через 1 минуту
и все-таки, почему заголовок 2А49494, а не 49 49 2A 00 как в специцифкации?
В файл dword записывается от младших байтов к старшим. То есть после компиляции в файл запишется 49 49 2A 00.
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 11:15  [ТС]
murderer, понял, спасибо). А не подскажите еще чем можно открыть потом tiff чтобы вся структура отобразилась корректно, по байтам или словам? А не как это бывает, открываешь в блокноте или notepad++ файл, а там одни иероглифы
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 11:21
Для отображения структур хорошо подходит kaitai, но в нём нет готового скрипта для разбора tif - нужно писать самому.
1
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 11:39  [ТС]
murderer, а если просто в блокноте файл создавать, как данные должны быть представлены? Т.е. например по 16 бит через пробел? Заголовок: 49 49 2A 00 Потом структура IFD: ........ Сами данные: 00 00 00 01 00 02 .... FF FE FF FF
В таком виде?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 11:41
Нет, конечно. Попробуй HxD.
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 11:49  [ТС]
murderer, не, это же прога для чтения? А я говорю про запись, если в блокноте согласно структуре понабивать данные в 16ричном виде по типу, как привел выше
Заголовок: 49 49 2A 00 Потом структура IFD: ........ Сами данные: 00 00 00 01 00 02 .... FF FE FF FF
, и прописать расширение tiff, разве такой файл потом не прочтется как tiff?
0
4195 / 1841 / 223
Регистрация: 06.10.2010
Сообщений: 4,127
03.07.2021, 11:58
это же прога для чтения?
Не только. В ней можно создавать файлы.
0
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
03.07.2021, 12:01  [ТС]
murderer, а с блокнотом вопрос?
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
А я говорю про запись, если в блокноте согласно структуре понабивать данные в 16ричном виде по типу, как привел выше
Цитата Сообщение от DmitryDDDD Посмотреть сообщение
и прописать расширение tiff, разве такой файл потом не прочтется как tiff?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2021, 12:01

Преобразование изображения в градации серого
Нашел! Dim grayscale As New Imaging.ColorMatrix(New Single()() _ { _ New Single() {0.299, 0.299, 0.299,...

Преобразование изображения к оттенкам серого
Здравствуйте! Очень нужна помощь) Пишу приложение, которое делает выделение контуров на изображении методом Робертса. Для начала нужно...

Сохранение изображения 16-бит оттенков серого
Получаю массив цвета пикселей. Необходимо сохранить его в .tiff На экран вывести 16 бит проблематично, поэтому достаточно будет и 8...

Перевод в градации серого части изображения
Доброго времени суток! Нужна помощь. Возникла проблема при выполнении вот такой работы: "Создайте функцию, выводящую на изображение...

Как получить 3Д график из данных полученных из изображения в оттенках серого?
У меня такой вопрос - как получить 3Д график из данных полученных из изображения в оттенках серого, где бы по осям х и у были координаты...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru