![]() |
помогите разобраться с прогой в MatLab
я только начал его учить ;)
вот функция Код:
function B=matrix_cheak(A) Код:
Error in ==> C:\MATLAB6p5\work\matrix_cheak.m |
может быть потому что v1(a) не определен ?
|
Drakosha если я определяю его например v1=[1:9]; то проблемма таже :(
|
точнее, значение в в1(а) не определено, а ты его читаешь
сорри, глупость сморозил. |
Drakosha дело говорит, и не только v1, no i A.
Код:
n=1; П.С. А какая ошибка написано всего лишь одной строкой перед ошибкой : Код:
??? Undefined function or variable 'A'. |
Цитата:
или всё равно как до фора надо было обьявлять переменую? Цитата:
так если её обьявить в теле то значение матрицы уже будет другим ? Цитата:
|
Ысчо раз: ты пытаешься прочесть из массива переменную, которая не была определена.
Цитата:
Размер А должен быть как минимум 1х9. тоже и для v1. Они должны быть определены (забиты значениями) до того как ты к ним обращаешься. Цитата:
Цитата:
И не надо иметь переменные с похожими названиями (а и А) - это очень плохо сказывается на отладке.Переименуй а в ind_a, например. Для дебуга зайди в редакторе в меню DEBUG, поставь галочку напротив "Stop if error". Тогда при ошибке прога будет останавливаться на месте где она случилась и ты сможешь посмотреть значения переменных и понять почему случилась ошибка. смарт-индент: автоматический формат кода. выдели кусок кода (или сразу весь), правый клик -> смарт-индент и будет тебе красота и счастье. |
crawler извени за мою тупость :)
но я не понял Цитата:
Цитата:
или я что то не понял ;) |
inkognito
Извиняю :) Просто НЕЛЬЗЯ обращатся к ячейке с несуществующим индексом. Код:
допустим А - одноразмерный массив снова, в твоей функции может случится так что некоторые ячейки v2 не будут определены ТОБОЙ. В таком случае Матлаб автоматически забьет неопределенные ячейки нулями, а размер v2 будет определен последней определенной ячейкой. Т.Е. если ты определишь Код:
v2=[]; |
crawler на счет v я понял;
а вот как быть с матрицей нет, вот допустим самая простая функция Цитата:
Цитата:
|
а как ты ето запускаешь?
vot (glupii) primer, _vajno_ polojit ego v file fun1.m --------------------------------- function f = fun1(x) %% This is the function f(x) f(1) = x(1)^3 + x(1)*x(2)^3 - 9; f(2) = 3*x(1)^2*x(2) - x(2)^3 - 4; ---------------------------------------- |
Drakosha я ложил в фаил
например Цитата:
внем ввожу пример простой функции Цитата:
потом закрываю его сохраняю под этим именем, потом из самого матлаба открываю фаил abc.m делаю в нём run и внём выдаёт ошибку, часть черная часть красная Цитата:
|
а зачем отрывать файл? Надо сделать так:
abc(4) <enter> и получишь 3 ;) |
inkognito
ну ты даешь! А если бы ты в С такое написал, компайлер бы не заругался? Во первых ты запускаешь ФУНКЦИЮ abc без входных аргументов. А потом удивляешься что А не определен. Разницу между скриптами и функциями знаешь ? Вот она! Теперь ты ее можешь почувствовать. Испаравляй как сказал Drakosha. а во вторых как ты хочешь получать назад значения ? Код:
function Z=abc(A) Programming and Data Types: M-File Programming: Functions |
Цитата:
так как сказал Drakosha всё работает, но всё равно как отдельная функция получается ошибка :confused: помогите плиз сделать это как отдельную функцию Цитата:
где взять не подскажешь? :) |
Цитата:
ты не можешь запускать функцию из дебаггера (окно редактора). Ты должен сделать скрипт (еще один файл) и запускать функцию через него, а не саму функцию. в скрипте напиши: Код:
X = magic(3); |
а чем скрипт отличается от функции?
а почему debug->step ne активный ? хотел посмотреть по ход функции по шагам но оно не активное чего то.. :confused: вроде нашел как делать step там для этого бреёк поинт вроде надо ставить, но не пойму где отображаются значения переменых возле которых стоит стрелка вроде нашел как делать step там для этого бреёк поинт вроде надо ставить, но не пойму где отображаются значения переменых возле которых стоит стрелка |
Серьезно почитай хелпы, там все написано.
Скрипт не принимает входных параметров и не возвращает значений. При вызове скрипта из кода не опускаешься по стеку функций и "скоп" остается тот же. Значения можно посмотреть в редакторе (подведи к переменноймышку), или в окне самого матлаба (введи имя перемнной). |
Скажите, как написать в matlab функцию которая делает accumulated histogram какой то картинки?
|
Сделать обычный histogram через hist или imhist, а далее просуммировать
a(i) = sum_{j=1:i} b(j) -- извини нет под рукой матлаба, по моему есть спецальная фунция для этого, но и руками не сложно... |
надо написать в матлабе следущее:
(есть такая готовая функция но мне надо написать свою, что то в готовой не могу разобраться, сильно накрученная она) HistEqual(X, Y) Histogram equalization. After running this function, the histogram of X should be as similar to the histogram of Y as possible, without changing the histogram of Y. Return the new image after histogram equalization. алгоритм следующий: Equalize :For every original gray level k 1. Calculate the image histogram 2. Find the accumulative sum of the histogram values - yk (in Matlab – cumsum(vec)) 3. Normalize the values of the histogram accumulative sum by dividing in the total number of pixels 4. Multiple the normalized vector in the maximal gray level value (K-1) and round (shift back to the original gray level range) 5. Map the gray levels values to the result of step (3) 6. Stretch the values back to the range 1,..K (improve contrast in the end of this process) вроде все ясно но вот как сделать в матлабе пятый пункт не понимаю :( помогите плиз заранее спасибо |
Цитата:
Код:
origImage = imread(<your_file1>); % Х |
Цитата:
Цитата:
только histeq должна быть написана мной Цитата:
ведь гистограмма говорит о том сколько пикселов имеют такой-то уровень серого, я же не знаю какие именно пикселы гистограмма оригинальной картинки такая: http://img78.***************img78/9462/origimagemr7.gif зеркало http://s.foto.radikal.ru/0704/13/08cc834d5100.gif а гистограмма референсной картинки такая: http://img260.***************img260/6813/refimagerk8.gif зеркало http://s.foto.radikal.ru/0704/3e/f89dabc3ab0d.gif не понимаю как сделать замену пикселов в картинке :rolleyes: |
В результате шагов 1-4 ты получаешь монотонно растущую (!)функцию "интеграла" нормализованной гистограммы референса. И такую же монотонно растущую функцию "интеграла" гистограммы оригинала. То есть по оси Х цвет, а по оси У - сколько процентов пикселов с цветом меньшим или равным данному. Теперь тебе надо подогнать оригинал под референс. В твоем случае первый значения в оригинале появляются в районе "цвета" 240 - 9000 пикселов с таким цветом. на гистограмме референса ты смотришь на каком цвете у тебя накопилось 9000 пикселов (допустим 40) - значит всем пикселам с цветом 240 с оригинала присваиваешь цвет 40. Затем берешь цвет 241 - снова 9000 пикселов. Значит на графике "интеграла" будет 18000. Смотришь на референсе какой цвет сответсвует 18000 - скажем 80. Всем пикселям с цветом 241 присваиваешь 80. И так далее.
Это для конкретного случая что ты привел, когда размеры картинок одинаковы. Шаг 3 (нормализация) позволяет сравнивать картинки разных размеров - убирает зависимость от реального размера картинки, и оставляет лишь процентную зависимость. Удачи. |
Цитата:
что делать в этом случае? даже если нормализирую две аккумулятивные гистограммы(пункт 3 в алгоритме) тоесть в одной и второй значения от нуля до 1 то все равно там значения точно не совпадают или я не правильно понял как делать надо ? :rolleyes: |
Ты смотришь на саму гистограмму что ли :rolleyes: на интеграл (cumsum) смотри гистограммы. Сама гистограмма - это сколько точек имеет какой цвет. А кумулятивная гистограмма (интеграл) - это сколько точек имееют цвет меньший либо равный К.
У тебя гистограмма референса ровная. 9000/220 - выходит 40 ;). Возьми нормализованные графики интегралов гистограм. Это будут монотонно растущие функции в пределах [0..255, 0..1]. Цвет 240 имеет значение 0.15 ( то есть 9000 это 15% от общего количества точек- следовательно размер картинки 60К пикселов). Идешь на гистограмму референса смотришь где есть 0.15 - и конвертишь 240 в тот цвет. Смотришь цвет 241 - у него значениие будет уже 0.3 (хотя точек с цветом 241 столько (9000) же как и 240). Смотришь на интеграле гистограмы референса 0.3 - ставишь этот цвет. Тогда получиться что в процентном отношении цвета референса и оригинала совпадут (не учитывая ошибок квантизаации) - то что ты и искал. |
Я матлаб незнаю, но
while i<=length(str) ... i=i+1; это перебор чисел от i до количества символов в стринге. if (str(i)~=' ') проверка символа на текущей позиции. в зависимости от результата проверки делаются присвоения переменным. |
Часовой пояс GMT +4, время: 20:46. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.