سوال في المصفوفات

السلام عليكم

ممكن مساعدة في سوال التالي
اذا كان عندي مصفوفة [ A=[1 1 1;2 2 2;3 3 3;4 4 4 ومصفوفة اخرى [ B=[0 0 0 واريد ان اكون المصفوفة التالية من خلال المصفوفتين

1 1 1
0 0 0
2 2 2
0 0 0
3 3 3
0 0 0
4 4 4

انا حاولت احلها لكن للاسف كان يطلع لي المصفوفة بالشكل

1 1 1
0 0 0
3 3 3
0 0 0

اتمنى الرد وشكرا

c=[A(1,:) ;B ;A(2:end,:)]

A=[1 1 1;2 2 2;3 3 3;4 4 4];
B=[0 0 0];
[N M] = size(A);
j = 1;
C(1,:)= A(1,:);
for i = 2: N + N-1
    if (rem(i,2) == 1)
        C(i,:)= A(i-j,:);
        j = j + 1;    
    else
        C(i,:) = B;
    end
end
C 

جزاكما الله الجنة

اخي احمد هناك عندي اسئلة اخرى في مشروع التخرج هل بامكاني ان اسال واذا كان بالامكان هل اضع اسئلتي هنا
ولكما جزيل الشكر

أكيد طبعا بأمكانك السؤال فى أى وقت

جزاك الله خيرا

انا الان اتعامل مع الصور وبعد مااحول الصورة الرماديه الى مصفوفه من 1و0
سيكون عندي اذا كان حجم المصفوفة 400-400
ستكون المصفوفة الجديدة مكونة من 160000-8

الان انا اريد ان اكون مصفوفتين من هذه المصفوفه وساضرب لك مثال

[A=[1 1 1 1;2 2 2 2;3 3 3 3;4 4 4 4

الان اريد مصفوفتين
[B=[1 1;2 2 ;3 3 ;4 4
[C=[1 1;2 2;3 3;4 4

انا كتبت الكود التالي على الصورة ويطلع لي المصفوفة الاولى صحيحة لكن الثانية لا

A=imread('aaa.jpg');0
B=imresize(A,[400 400]);0
C=rgb2gray(B);0
D=des2bin(C);0
for i=1:160000
for j=1:4
M(i,j)=D(i,j);0
end
end
for i=1:160000
for j=5:8
L(i,j)=D(i,j);0
end
end

ياريت ترسلى الصورة المثال المستخدمة aaa.jpg
وأيضا ترسلى هذه الدالة des2bin

السلام عليكم

انا لااعرف كيف انزل الصورة لكن هي عبارة عن اي صورة ملونه من الجهاز وتستطيع كتابه اسم الصورة مع نوعها بدل aaa.jpg

اما الدالة فهي كالتالي لاني غلطت في كتابتها
dec2bin
وهي للتحويل من النظام العشري الى النظام الثنائي
وجزاك الله خيرا

لماذا تستخدمى for وتعقدى البرنامج وأيضا بطىء جدا والموضوع بسيط أصلا
جربى هذا الكود

A=imread('ward.jpg');
B=imresize(A,[400 400]);
C=rgb2gray(B);
D=dec2bin(C);

M = D(:,1:4);
L = D(:,5:end);

وبالنظر للكود الاتى

for i=1:160000
    for j=5:8
        L(i,j)=D(i,j);
    end
end

j=5:8 هذا بالنسبة للمصفوفة L غير ممكن لان هذه المصفوفة غير موجودة وسيقوم بالبرنامج بانشاءها من خلال for loop ولكن أين الاعمدة من 1 الى 4 حيث سيقوم البرنامج بعمل المصفوفة 8 أعمدة واول أربعة أعمدة ستكون بدون اى قيمة فى هذه الحالة وستكون صفر فى حالة ان نوع المصفوفة uint8

اخي الكريم اولا شكرا لك
ثانيا انا اتعلم الماتلاب لوحدي مع بعض المساعدة من دكتور في الجامعة لان مشروع تخرجي بالماتلاب لذلك اكتب الكود بالصيغة التي اعتقد انها تصح واشكرك فعلا لانك سهلت علي.

فعلا هذه المشكله هي التي تحدث لي
ساطبق الكود وارد عليك لانه مازال لدي استفسارات
واعذرني على الازعاج وكثرة الاسئلة
جزاك الله خيرا

أهلا بك فى اى وقت

في هذا الكود لم افهم هذه الاسطر:
for i = 2: N + N-1
C(i,:)= A(i-j,:);

وايضا
M=D(:,1:4);0
لماذا عملت (:)

المصفوفة الاولى مكونة من اربعة صفوف والثانية صف واحد ومطلوب ادخلها بين كل صفين من صفوف A
ولذلك المصفوفة C تستكون ستحتوى على عدد صفوف المصفوفة A بالاضافة الى عدد مرات الادخال وهى عدد صفوف A ناقص واحد .

ولذلك مثلا لو عدد صفوف A يساوى 10 سيكون عدد صفوف C يساوى 19
وسيتم ادخال صفوف المصفوفة A الفردية فقط الى المصفوفة C
والباقى سيتم ادخاله بالمصفوفة B

أما الامر الاتى :

M=D([COLOR=darkorange]:[/color],1:4)

يعنى جميع صفوف المصفوفة D والاعمدة من 1 الى 4 فقط وهذه تعنى : جميع الصفوف او جميع الاعمدة

ويرجى قراءة كيفية تعامل الماتلاب مع المصفوفات حيث لا يصح التعامل مع الماتلاب بدون علم

جزاك الله خيرا

اخي الفاضل احاول ان اطبق ادخال المصفوفةB الصفرية في المصفوفةM
لكن للاسف تظهر لي مصفوفة جديده فيها ثلاث صفوف فارغة ثم صف فيه ارقام وهكذا
بالرغم من اني استخدمت نفس الدوال.

ياريت تبعتى البرنامج الذى تحاولين تطبيقه

هذا هو الكود الذي استخدمته


A=imread('h.jpg');
B=imresize(A,[400 400]);
C=rgb2gray(B);
D=dec2bin(C);
S=[0 0 0 0];
M = D(:,1:4);
L = D(:,5:end);
[N W] = size(M);
j = 1;
X(1,:)= M(1,:);
for i = 2: N + N
    if (rem(i,2) == 1)
        X(i,:)= M(i-j,:);
        j = j + 1;    
    else
        X(i,:) = S;
    end
end
X

أولا المصفوفة S أفضل ادخالها بالشكل التالى

S=dec2bin(0);

حتى تكون من نفس نوع المصفوفة M

ثانيا الFor loop تكون على الشكل الاتى

for i = 2: N + N - 1

وهذا البرنامج فى شكله النهائى

clear
A=imread('ward.jpg');
B=imresize(A,[400 400]);
C=rgb2gray(B);
D=dec2bin(C);
S=dec2bin(0);
M = D(:,1:4);
L = D(:,5:end);
[N W] = size(M);
j = 1;
X(1,:)= M(1,:);
for i = 2: N + N - 1
    if (rem(i,2) == 1)
        X(i,:)= M(i-j,:);
        j = j + 1;    
    else
        X(i,:) = S;
    end
end
X

اخي الكريم اولا شكرا جزيلا على تفاعلك معي

(ثانيا الFor loop تكون على الشكل الاتى

for i = 2: N + N - 1

)

انا عملتها بدون -1 عشان في اخر صف يكون لدي 00000

لكن المشكلة انه عندما طبقت البرنامج كانت المصفوفة الجديدة X ليست المصفوفة M مع اضافة صفوف صفرية ولم اعرف ماهو السبب

واكرر جزاك الله خيرا على مجهودك الرائع