السلام عليكم,,, اخواني ارجو مساعدتي,, مطلوب انشاء صورة شطرنج ملون في الماتلاب,,انا عملت الكود بس معرفت اربط مع دالة rand()
ارجو المساعدة في ماتلاب
رقعة الشطرنج مكونة من لونين فقط، لماذا كل هذه الألوان
و لماذا تستعمل الدالة رند هنا من الأساس
تستعمل لتوليد مصفوفة ذات قسم عشوائية rand
اخي هدا المطلوبة ان تكون ملونة بالوان عشوائية وبستخدام دالة الراند
kenham كتب:رقعة الشطرنج مكونة من لونين فقط، لماذا كل هذه الألوان
و لماذا تستعمل الدالة رند هنا من الأساس
تستعمل لتوليد مصفوفة ذات قسم عشوائية rand
اخي هدا المطلوبة ان تكون ملونة بالوان عشوائية وبستخدام دالة الراند
rand ستعطيك قيم عشوائية بين الـ0 والواحد، يمكنك توليد 10×10 بكسلات عشوائية حيث تمثل لون الرقع، هكذا:
m = rand([10, 10, 3]);
أو إذا كنت تفضلين تقليل الذاكرة الازمة لتمثيل الصورة عن طريق استخدام uint8:
m = uint8(255 * rand([10, 10, 3]));
ثم كبري الصورة باستخدام imresize مع استخدام nearest للتكبير (الدالة تستخدم bicubic interpolation افتراضياً لو لم تمرري شيء)، عدد مرات التكبير اضربيها بعدد البكسلات للحصول على الحجم النهائي للصورة:
m = imresize(m, 50.0, 'nearest');
مثال (حجم الصورة 10×50 = 500 بكسل لكنني صغرت النافذة):

m = uint8(255 * rand([10, 10, 3])); m = imresize(m, 50.0, 'nearest'); imshow(m)
تم تعديل هذه المشاركة بواسطة Mr.B في 26 مارس 2016 في 18:51
Mr.B كتب:rand ستعطيك قيم عشوائية بين الـ0 والواحد، يمكنك توليد 10×10 بكسلات عشوائية حيث تمثل لون الرقع، هكذا:
m = rand([10, 10, 3]);أو إذا كنت تفضلين تقليل الذاكرة الازمة لتمثيل الصورة عن طريق استخدام uint8:
m = uint8(255 * rand([10, 10, 3]));ثم كبري الصورة باستخدام imresize مع استخدام nearest للتكبير (الدالة تستخدم bicubic interpolation افتراضياً لو لم تمرري شيء)، عدد مرات التكبير اضربيها بعدد البكسلات للحصول على الحجم النهائي للصورة:
m = imresize(m, 50.0, 'nearest');مثال (حجم الصورة 10×50 = 500 بكسل لكنني صغرت النافذة):
m = uint8(255 * rand([10, 10, 3])); m = imresize(m, 50.0, 'nearest'); imshow(m)
جميل بارك الله فيك,,ولكن الصورة تظهر صغيرة والمطلوبة ان تكون بحجم 1024*1024 وحجم كل مربع 64,,ماذا افعل
عبير22 كتب:جميل بارك الله فيك,,ولكن الصورة تظهر صغيرة والمطلوبة ان تكون بحجم 1024*1024 وحجم كل مربع 64,,ماذا افعل
أنشئ مصفوفة الـrand لتكون 16×16وكبريها في imresize لـ64 مرة أو العكس (لأن 1024/64=16).
تم تعديل هذه المشاركة بواسطة Mr.B في 26 مارس 2016 في 21:55
Mr.B كتب:أنشئ مصفوفة الـrand لتكون 16×16وكبريها في imresize لـ64 مرة أو العكس (لأن 1024/64=16).
تمام ظبطت ,,بس اخي هدا جوهر الحل ولكن المطلوب مني انشاء3 مصفوفات ودمجهم في مصفوفة واحدة عن طريق الدالة ()cat ثم جعل المصفوفة المدموجة تأخدالقيم من الدالة rand() عموما انا سويت الكود التالي لكن ما عرفت اربط المصفوفة بدالة الراند <<كيف تم عملية الربط
;('rgbImage = zeros(640, 480, 3, 'uint8
Extract the individual red, green, and blue color channels%
;(redChannel = rgbImage(:, :, 1
;(greenChannel = rgbImage(:, :, 2
;(blueChannel = rgbImage(:, :, 3
Make a square some RGB color%
;redChannel(100:150, 200:350) = 255
;greenChannel(100:150, 200:350) = 213
;blueChannel(100:150, 200:350) = 57
Recombine separate color channels into a single, true color RGB image%
;(rgbImage = cat(3, redChannel, greenChannel, blueChannel
Display it%
;(imshow(rgbImage
ربما تقصدين شيء مثل:
rgbImage = zeros(640, 480, 3, 'uint8'); % Extract the individual red, green, and blue color channels redChannel = rgbImage(:, :, 1); greenChannel = rgbImage(:, :, 2); blueChannel = rgbImage(:, :, 3); % Make a square some RGB color %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dim = size(redChannel(100:150, 200:350)); redChannel(100:150, 200:350) = uint8(255 * rand(dim)); greenChannel(100:150, 200:350) = uint8(255 * rand(dim)); blueChannel(100:150, 200:350) = uint8(255 * rand(dim)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Recombine separate color channels into a single, true color RGB image rgbImage = cat(3, redChannel, greenChannel, blueChannel); % Display it imshow(rgbImage);
انظري لكيفية استخدام rand وجربيها بقيم مختلفة:
>> rand(2, 2) % مصفوفة 2×2 ans = 0.4644 0.9302 0.9677 0.1364 >> rand(1, 2, 3) % ثلاثة مصفوفات 2×1 ans(:,:,1) = 0.4486 0.9150 ans(:,:,2) = 0.9629 0.9524 ans(:,:,3) = 0.9988 0.9827 >> uint8(255 * rand(2, 2)) % مصفوفة 2×2 لأعداد صحيحة من 0-255 ans = 122 83 31 13 >>
انظري لصفحة المساعدة في ماتلاب help، ستجدين كل ماتحتاجينه من معلومات عن طرق استخدام الدوال، مثلاً search rand
نعم هده طريقة الربط الدي احتاجها ولكن لاتعطي النتيجة المطلوبة ,,حيث الصورة الناتجة تحوي مربع بالوان عشوائية بينما المطلوب كامل الصورة........انقذني ايها النسر الذهبي
تم تعديل هذه المشاركة بواسطة عبير22 في 27 مارس 2016 في 16:22
الكود الذي وضعتيه يعلمك كيف تنشئين مصفوفة أصفار (3 مصفوفات بحجم 640x480):
rgbImage = zeros(640, 480, 3, 'uint8');
كيف تفصلين مركبات الصورة RGB (أو أي مصفوفة عموماً) إلى ثلاث مصفوفات بثلاثة متغيرات، اجراء تعديلات عليها واعادة دمجها، أنت لست بحاجة لإتباع هذه الخطوات في كل كود تكتبينه.
إذا انت مصرة على استخدام cat، يمكنك كتابة مثلاً:
widthHeight = 1024; squareSize = 64; squares = widthHeight / squareSize; redChannel = uint8(255 * rand([squares squares])); % 1 greenChannel = uint8(255 * rand([squares squares])); % 2 blueChannel = uint8(255 * rand([squares squares])); % 3 image = cat(3, redChannel, greenChannel, blueChannel); % 4 image = imresize(image, squareSize, 'nearest'); imshow(image);
خطوة الـzeros لن يكون لها أي فائدة لأن تلك القيمة لن تستخدم، الأربع الأسطر كان يمكن اختصارها بسطر واحد:
image = uint8(255 * rand([squares, squares, 3]));
الله يحفظك ويزيدك علم,, على مجهودك الرائع...
!عفوا ليش استخدمت هده الخطوة
squares = widthHeight / squareSize;
وما استخدمت squarsize على طول يعني اقصد ماهوالغرض من عملية التقسيم...
* وهل يوجد بديل للتكبير بدل من استخدام الامر الجاهز;(imresize(image, squareSize, 'nearest
....................................................................................................
عندي سؤال تاني هل استخدام checkerboard/kron function مع بعض تعطى نفس النتيجة وهى شطرنج ملون
تم تعديل هذه المشاركة بواسطة عبير22 في 28 مارس 2016 في 13:28
عبير22 كتب:الله يحفظك ويزيدك علم,, على مجهودك الرائع...
!عفوا ليش استخدمت هده الخطوة
squares = widthHeight / squareSize;وما استخدمت squarsize على طول يعني اقصد ماهوالغرض من عملية التقسيم...
* وهل يوجد بديل للتكبير بدل من استخدام الامر الجاهز;(imresize(image, squareSize, 'nearest
....................................................................................................
عندي سؤال تاني هل استخدام checkerboard/kron function مع بعض تعطى نفس النتيجة وهى شطرنج ملون
النسر الدهبي اين انت
squares = widthHeight / squareSize;
هذه غرضها ايجاد عدد المربعات التي تحتويها الصورة للصف والعمود، إذا كان عرض الصورة 1024 وأبعاد كل مربع 64، فعدد المربعات 1024/64=16 في كل صف وعمود.
ضرب الـkronecker أول مرة أقرأ عنه، لكن يظهر أنه يمكن استخدامه لاستبدال imresize(..., 'nearest')، إذا ضربتي بمصفوفة الوحدة ones كل عناصرها واحد، فإن المصفوفة ستكبر كما لو استخدمتي الـnearest، فيمكن استبدال:
image = imresize(image, squareSize, 'nearest');
بـ:
image = kron(image, ones(squareSize, 'uint8'));
لكن الفرق أن imresize أسرع للصور الكبيرة، وكذلك من يقرأ الكود يفهم أنك تكبيرين صورة.
النسر الذهبي ,,,اعذرني على كثرة الاسئلة ف انا مبتدائه في ماتلاب>>>![]()
اخي طلب مني عند الحل استخدام Class of image & Determine Class of image ...هل تم استخدامها بالفعل في الكود السابق؟.. ام اضيف الامر(class(image في نهاية الكود السابق ,,
اخير ,,, مطلوب مني كمان في Coursework شطرنج ملون بستخدام checkerboard/kron function انا سويت الكود بس طلع بدون الوان ,,كيف ضيف دالة الراند للكود التالي :
; (J=checkerboard(64,4,4
;J=J>0
;(x=ones(8
;(A=kron(x,J
;(imshow(A
تم تعديل هذه المشاركة بواسطة عبير22 في 30 مارس 2016 في 13:31


