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


(طالبة نظم) #1

السلام عليكم

ممكن مساعدة في سوال التالي
اذا كان عندي مصفوفة [ 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

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


(ايجيبت) #2
c=[A(1,:) ;B ;A(2:end,:)]


#3
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 

(طالبة نظم) #4

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

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


#5

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


(طالبة نظم) #6

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

انا الان اتعامل مع الصور وبعد مااحول الصورة الرماديه الى مصفوفه من 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

#7

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


(طالبة نظم) #8

السلام عليكم

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

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


#9

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

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

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

#10

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

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


(طالبة نظم) #11

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

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


#12

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


(طالبة نظم) #13

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

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


#14

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

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

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

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

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

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


(طالبة نظم) #15

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


(طالبة نظم) #16

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


#17

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


(طالبة نظم) #18

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


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

#19

أولا المصفوفة 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

(طالبة نظم) #20

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

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

for i = 2: N + N - 1

)

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

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

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