#matlab #matlab-figure #matlab-guide
#matlab #matlab-рисунок #matlab-руководство
Вопрос:
У меня есть изображение размером 640X480. Я хочу разделить его на 40X40, а затем применить общую операцию к каждому сегменту. итак, я сделал что-то вроде этого:
A= imread('image.jpg');
for a=0:11;
for b= 0:15;
B=A((1 a*40):(a 1)*40,(1 b*40):(b 1)*40);
....... the common program for each segment........
C= resu< %result of the operation
end
end
Мой вопрос в том, как я могу пометить C по-разному для каждого сегмента, чтобы я мог использовать их в дальнейшем для добавления этих сегментов обратно или еще.
Я попытался определить B что-то вроде этого:
A= imread('image.jpg');
for a=0:11;
for b= 0:15;
B=A((1 a*40):(a 1)*40,(1 b*40):(b 1)*40);
....... the common program for each segment........
C((a 1),(b 1))= result %result of the operation
end
end
Если бы это сработало, я мог бы использовать C(i,j) в качестве переменной (name), но это закончилось ошибкой. Что еще я могу сделать для маркировки результатов цикла for.
Надеюсь, мой вопрос понятен.
Комментарии:
1. Какую ошибку вы получаете?
C((a 1),(b 1))
подходит для скалярных результатов, является ли ваш результат матрицей?2. да, результатом также является матрица изображения размером 40X40.
Ответ №1:
Ответ №2:
Если ваш результат всегда равен 40×40, я бы использовал матрицу результатов 4d:
%preallocate at the beginning
C=nan(11,15,40,40)
И для заполнения в цикле
C(a 1,b 1,:,:)=result
Комментарии:
1. Я попробовал то, что вы сказали, с этой простой матрицей 9X9. Но я получил взамен много матриц с разными матрицами, и имя также выглядит как ** C(:,:,x,y){x,y = 1,2,3] ** . что это за имя? а также оно не уникально, существует более одной матрицы для одного и того же ** C(:,:,x,y){x,y = 1,2,3] ** . A=[1,2,3,4,5,6,7,8,9;8,7,6,5,4,3,3,2,9;2,1,4,5,6,7,5,8,4;0,9,8,7,6,5,4,8,3;1,3,4,6,8,0,8,3,6;1,4,2,6,4,8,8,3,6;1,2,4,2,5,6,4,8,3;6,4,3,2,6,8,5,3,4;3,4,2,4,3,5,4,6,7]; C=nan(2,2,3,3) для a=0:2; для b=0:2; B= A((1 a * 3):(a 1)*3,(1 b* 3):(b 1)* 3); C(a 1,b 1,:,:)=B end end