Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 14.05.2016
Сообщений: 94

Преобразование изображения по гистограмме. Гиперболическое преобразование гистограммы

14.03.2018, 22:44. Показов 3216. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые пользователи. При изучении путей обработки и фильтрации изображений в Матлабе столкнулся с такой проблемой. Задание: Гиперболическое преобразование гистограммы и другие методы. В считывание и построении гистограммы изображения проблем нет но при попытке применить любое преобразование с использованием синтаксиса L5(i,j) выдает ошибку
Subscript indices must either be real positive integers or logicals. Помогите ибо никак не могу разобраться, или подскажите как по другому считывать информацию с гистограмы что бы в дальнейшем было возможно видоизменять ее исполюзуя математику.

Matlab M
1
2
3
4
5
6
7
8
9
L=imread('lena.bmp');
figure, imshow(L);
L = L (:,:,1)
H=imhist(L);
figure, imhist(L);
CH=cumsum(H)./(N*M);
[N M]=size(L);
L5(i,j)=.01^(CH(ceil(255*L(i,j)+eps)))
figure, imshow(L5);
Миниатюры
Преобразование изображения по гистограмме. Гиперболическое преобразование гистограммы  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2018, 22:44
Ответы с готовыми решениями:

Преобразование изображения
Добрый день. Такой вопрос: как изменить пиксели в бинарном изображении на буквы P и N (черній цвет - P, белый - N)? И вывести...

Преобразование формата изображения n*m*4
Как преобразовать формат изображения n*m*4 в бинарное изображение.

как вывести значения линий гистограммы в Edit по щелчку мыши гистограмме
Подскажите пожалуйста как вывести значения линий гистограммы в Edit по щелчку мыши гистограмме, т.е. есть построенная гистограмма при...

9
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
14.03.2018, 23:26
DuDusty, Не используйте i и j в качестве имен переменных.
However, it is best to avoid using i and j for variable names if you intend to use them in complex arithmetic.
https://uk.mathworks.com/help/matlab/ref/j.html
0
1 / 1 / 0
Регистрация: 14.05.2016
Сообщений: 94
14.03.2018, 23:31  [ТС]
А что использовать? 1i и 1j z я пробовал использовать, но это не помогло.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
14.03.2018, 23:34
Да и вообще, у Вас i и j нигде не объявляются и не инициализируются перед использованием.

Добавлено через 2 минуты
Цитата Сообщение от DuDusty Посмотреть сообщение
А что использовать?
Да что угодно, k и n например. А главное, присвойте им значения.
0
1 / 1 / 0
Регистрация: 14.05.2016
Сообщений: 94
14.03.2018, 23:40  [ТС]
Как я писал в матлабе я новичок и кусок со считыванием нашел в интернете и там не было никакого обьявления. Я полагал что
i и j это элементы многомерного массива как в с++ arr[i][j] - объявления не требуют.Ну в любом случае что делать я не знаю.

Добавлено через 2 минуты
Да и заменив i и j на константы я получаю лишь черный квадрат на выходе.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
14.03.2018, 23:52
Цитата Сообщение от DuDusty Посмотреть сообщение
как в с++ arr[i][j]
А что, в С++, или еще в каком-нибудь языке, переменные (не зависимо от их имени) сами решают какое значение им принять в каждый конкретный момент, или это все-таки делает программист?

Наверно нужно строку
Matlab M
1
L5(i,j)=.01^(CH(ceil(255*L(i,j)+eps)))
обвернуть двумя циклами (по строкам и по столбцам пикселей Вашего рисунка). И изменять соответствующим образом индексные переменные (хотите n и k, хотите i и j).
0
1 / 1 / 0
Регистрация: 14.05.2016
Сообщений: 94
15.03.2018, 00:11  [ТС]
я имел ввиду что i и j в массивах это индексы которые объявлять не нужно. К ним на прямую можно обращаться.

Добавлено через 5 минут
Два цикла не помогли, тут не тот смысл что нужно перебором каждый пиксель преобразовать.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
15.03.2018, 01:17
Лучший ответ Сообщение было отмечено DuDusty как решение

Решение

Цитата Сообщение от DuDusty Посмотреть сообщение
я имел ввиду что i и j в массивах это индексы которые объявлять не нужно. К ним на прямую можно обращаться.
Оно, может быть, на альфа-Центавра конечно и так, ... но на Земле, каждая переменная перед своим использованием должна получить какое-либо значение. Иначе не ясно к элементу массива с каким индексом происходит обращение. К первому, второму или последнему, а может к несуществующему.

Цитата Сообщение от DuDusty Посмотреть сообщение
тут не тот смысл что нужно перебором каждый пиксель преобразовать.
Тут как раз каждый пиксель и нужно в результате преобразовать. Другое дело, коль уж мы в Матлабе, что можно и без циклов.

Matlab M
1
2
3
4
5
6
7
8
9
L=imread('out0.bmp');
L = L (:,:,1)
figure, imshow(L);
H=imhist(L);
figure, imhist(L);
[N M]=size(L);
CH=cumsum(H)./(N*M);
L5=0.95.^(255.*CH(ceil(L+eps)))
figure, imshow(L5);
Я несколько модифицировал саму формулу преобразования. Коэффициент 0.95 подобрал для своего рисунка, Вы подберите свой.
1
1 / 1 / 0
Регистрация: 14.05.2016
Сообщений: 94
15.03.2018, 01:51  [ТС]
Благодарю что помогли, могли бы ds сказать что именно вы сделали и почему помогло? ибо как я вижу вы попросту убрали индексы вообще и слегка изменили саму функцию? как это отображает изменение масcива. Спрашиваю не из за назойливости а лишь что бы разобраться на будущие как правильно обращать к элементам изображения и модифициаровать их математически.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
15.03.2018, 10:22
Цитата Сообщение от DuDusty Посмотреть сообщение
сказать что именно вы сделали и почему
Вот это воистину сложная задача

Ну, во-первых я поменял местами строки 6 и 7. Т.е. сперва присвоил значения переменным N и M, а уж затем использовал их произведение в качестве знаменателя.

Во-вторых, в формуле преобразования (стр. 8) я изменил местоположение множителя 255, по следующей причине. Яркость каждого пикселя (значения в массиве L) есть целые числа в диапазоне 0-255. Функция imhist (по умолчанию) возвращает вектор длиной 256 значений. Соответственно длина вектора CH тоже 256. Значение, возвращаемое функцией ceil (не ясно зачем она здесь вообще нужна) используется как индекс при обращении к элементам вектора CH. Любая яркость пикселя, которая будет >1, умноженная на 255 даст значение индекса >255. Т.о. получаем обращение к несуществующему элементу вектора CH.

В-третьих, благодаря возможностям Матлаб, я отказался (в стр. 8) от использования явной индексации элементов массивов L и L5, но использовал векторную форму записи. Т.о. отпала необходимость явной реализации циклов перебора двумерных массивов пикселей по строкам и столбцам. Внимание! Но это не означает, что перебора пикселей теперь нет. Просто за меня это теперь делает Матлаб, причем в разы эффективнее чем с циклами. Это как про суслика: Вы его не видете, я его не вижу, а он есть

В-четвертых, (стал немного уставать ) с самой формулой (стр. 8) это было чистое шаманство. Можно например вот так:
Matlab M
1
L5=0.01.^(CH(L))
Результат тот же и соответствует изначальной формуле преобразования https://www.cyberforum.ru/cgi-bin/latex.cgi?{A}^{H\left(L \right)}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.03.2018, 10:22
Помогаю со студенческими работами здесь

Преобразование изображения
Привет всем. Может и не по теме, но всё же.. Создаю приложение windowsforms, и как бы в начале запуска программы выдаю...

Преобразование изображения
Всем здравствуйте, подскажите пожалуйста решение такой задачи. Нужно преобразовать черно-белое изображение в двоичный код, а затем...

Преобразование изображения
Подскажите, есть программа, которая на вход получает картинку и считывает ее побайтово, в итоге мы получаем ее бинарный код. Этот код мы...

Преобразование изображения в текст
в общем необходимо написать программу для преобразования картинки в текст, как это сделать и вообще с чего начать?

Степенное преобразование изображения
Не получается возвести каждый пиксель изображения в степень. Сначала нахожу якрость пикселя и ее пытаюсь возвести в степень по формуле...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru