انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB)

رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB)

#1
سلام.
فرض کنید که تعدادی رنگ (Color) داریم که بر اساس کد رنگ RGB تعریف شده اند (یعنی هر کدام، شامل 3 عدد هستند که در واقع چگونگی ساخت آن رنگ از میزان ترکیب 3 رنگ قرمز (Red) و سبز (Green) و آبی (Blue) را بیان می کند).
اکنون قصد داریم که این رنگ ها (Color) را به صورت تعدادی نقطه در فضای سه بعدی (3D) نمایش دهیم. هر نقطه نیز دقیقا با همان رنگی (Color) نمایش داده می شود که متناظر با آن است.
محورهای مختصات مورد نظرمان نیز همان سه مقدار تعریف کننده رنگ می باشند، یعنی مقدار مربوط به میزان رنگ قرمز (R - Red)، مقدار مربوط به میزان رنگ سبز (G - Green) و مقدار مربوط به میزان رنگ آبی (B - Blue).
برای این منظور، می توانیم از دستور scatter3 در متلب (MATLAB) استفاده نماییم.

مثال :
در این مثال، 5 نقطه را تعریف می کنیم. برای تعریف این 5 نقطه، یک ماتریس با 3 ردیف و 5 ستون خواهیم داشت. 
در واقع هر ستون، شامل 3 مقدار مربوط به تعریف رنگ یک نقطه می باشد. بنابراین تعداد ستون ها، برابر تعداد نقاطی است که داریم.
تعداد ردیف هم که برابر 3 است، زیرا برای تعریف هر رنگ، 3 مقدار خواهیم داشت (بر اساس تعریف رنگ RGB).

کد متلب (MATLAB) :

کد پی‌اچ‌پی:
clear all
close all
clc

= [2550  0  1000;
 
    0  2550  100160;
 
    0  0  255100120]
 
scatter3(A(1,:), A(2,:), A(3,:), 50, (A/255)', 'filled')

xlabel('
R')
ylabel('
G')
zlabel('B') 

سه خط اول کدها، برای عدم تداخل برنامه قعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.

نتیجه اجرای کد متلب (MATLAB) بالا :

   

نکته :
اگر در ماتریس تعریف نقاط دقت کنید، سه نقطه اول که تعریف کرده ایم، معادل 3 رنگ خالص قرمز (R - Red)، سبز (G - Green) و  آبی (B - Blue) می باشند. یعنی از 3 پارامتر تعریف رنگ، یکی را برابر 255 قرار داده ایم و بقیه برابر 0 در نظر گرفته شده اند تا یک رنگ اصلی خالص داشته باشیم.
این سه رنگ اصلی را به سادگی می توانید در شکل مشاهده کنید.

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

رسم شکل سه بعدی (3D) از نقاط متناظر با رنگ (بر اساس RGB) (متلب - MATLAB)

#2
اکنون قصد داریم که تلاشی برای رسم رنگ های تعریف شده بر اساس RGB ، توسط دستور surf داشته باشیم.
برای رسم شکل سه بعدی (3D) بر اساس دستور surf ، شیوه رسم بستگی به نوع اطلاعات دارد و ما صرفا کدهایی را مثال می زنیم که شیوه کلی نمایش رنگ های مورد نظرمان توسط دستور surf را متوجه شوید (بنابراین حتما چک کنید که شیوه صحیح نمایش برای اطلاعات شما به چه صورت خواهد بود).
در واقع نکته مهم این است که رنگ های مورد نظر ما، در سطوح ساخته شده از اتصال تعدادی نقطه نمایش داده می شوند، اما اینکه مختصات آن نقاط را چه مقداری در نظر بگیریم، بستگی به نوع اطلاعات شما دارد و بنده صرفا یک کد پایه را ارائه خواهم کرد.
یک نکته مهم دیگر نیز وجود دارد : چون رنگ ها در سطوح بین اتصال نقطه ها رسم می شوند (نه در خود نقطه ها) (بر خلاف شکل نوشته قبلی)، بنابراین تعدادی از رنگ ها را در شکل مشاهده نخواهیم کرد (این مورد را در مثال ها بررسی کنید تا متوجه منظورم شوید).
برای مختصات سه بعدی هر نقطه، باید سه مقدار x و y و z را تعیین کنیم. بنده به عنوان مثال، مختصات x و y برای نقاط را به صورت ترتیب اعداد 1 و 2 و 3 در نظر می گیرم. پس 3 در 3 می شود 9 نقطه. بنابراین باید مختصات z برای آن نقطه ها را به صورت یک ماتریس 3 در 3 مشخص کنیم.
بنده بر اساس نوع انتخاب مقادیر برای z ، دو مثال می زنم. در مثال اول، مقادیر z را به صورت دلخواه می نویسم که ربطی به رنگ ها ندارد. اما در مثال دوم، مقادیر z را برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ، در نظر می گیرم (شما می توانید برابر هر یک از مقدار دو رنگ اصلی دیگر و یا هر مورد دیگری در نظر بگیرید).
توصیه می شود در نرم افزار متلب (MATLAB)، به Help آن مراجعه نموده و راهنمای دستور surf را بخوانید (مخصوصا بخش Specify True Colors for Surface Plot که در مورد به کار بردن رنگ های RGB صحبت کرده است).


مثال اول (مقادیر z به صورت دلخواه) :
کد متلب (MATLAB) :

کد پی‌اچ‌پی:
clear all
close all
clc

1:3
1:3
= [362;
 
    854;
 
    957]

Red = [255/2550200/255;
 
      0  100/2550;
 
      200/2550100/255] % red
   
Green 
= [0  255/255100/255;
 
        0  100/255200/255;
 
        255/25500] % green
     
Blue 
= [0  0255/255;
 
       255/255100/255200/255;
 
       0100/2550] % blue

CO
(:,:,1) = Red; % red
CO
(:,:,2) = Green; % green
CO
(:,:,3) = Blue; % blue

surf
(X,Y,Z,CO)
xlabel('x')
ylabel('y')
zlabel('z')

rotate3d on 

همان طور که مشاهده می کنید، مقادیر رنگ ها را بر عدد 255 تقسیم نموده ایم (تا مقدار آنها بین 0 تا 1 باشد).
دقت کنید که دستور rotate3d را به کار برده ایم تا بتوانید با موس، شکل را بچرخانید و آن را از زوایای مختلف ببینید (تا سطوح پنهان شده در پشت برخی سطوی دیگر را نیز مشاهده نمایید).
نتیجه اجرای کد متلب (MATLAB) بالا :

   

کد پی‌اچ‌پی:
=

 
    1     2     3


=

 
    1     2     3


=

 
    3     6     2
     8     5     4
     9     5     7


Red 
=

 
   1.0000         0    0.7843
         0    0.3922         0
    0.7843         0    0.3922


Green 
=

 
        0    1.0000    0.3922
         0    0.3922    0.7843
    1.0000         0         0


Blue 
=

 
        0         0    1.0000
    1.0000    0.3922    0.7843
         0    0.3922         0 

با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :

   

پس می بینید که اگرچه 9 نقطه (رنگ) داشته ایم، اما تنها 4 سطح داریم و بنابراین 4 رنگ در شکل مشاهده می شود (باید ببینید اصلا این نوع نمایش اطلاعات به درد شما می خورد یا نه. یا اینکه با ترفندی خاص، سعی کنید که همه رنگ ها را در شکل نمایش دهید، بنده در این زمینه تجربه ای ندارم که آیا راهی وجود دارد یا نه).



مثال دوم (مقادیر z برابر مقدار پارامتر رنگ قرمز (Red) از هر رنگ) :
کد متلب (MATLAB) :

کد پی‌اچ‌پی:
clear all
close all
clc

1:3
1:3

Red 
= [255/2550200/255;
 
      0  100/2550;
 
      200/2550100/255] % red
   
Green 
= [0  255/255100/255;
 
        0  100/255200/255;
 
        255/25500] % green
     
Blue 
= [0  0255/255;
 
       255/255100/255200/255;
 
       0100/2550] % blue

CO
(:,:,1) = Red; % red
CO
(:,:,2) = Green; % green
CO
(:,:,3) = Blue; % blue

Red

surf
(X,Y,Z,CO)
xlabel('x')
ylabel('y')
zlabel('z')

rotate3d on 

نتیجه اجرای کد متلب (MATLAB) بالا :

   

کد پی‌اچ‌پی:
=

 
    1     2     3


=

 
    1     2     3


Red 
=

 
   1.0000         0    0.7843
         0    0.3922         0
    0.7843         0    0.3922


Green 
=

 
        0    1.0000    0.3922
         0    0.3922    0.7843
    1.0000         0         0


Blue 
=

 
        0         0    1.0000
    1.0000    0.3922    0.7843
         0    0.3922         0


=

 
   1.0000         0    0.7843
         0    0.3922         0
    0.7843         0    0.3922 

با کمی چرخاندن شکل، آن را بهتر مشاهده می کنیم :

   

Flower
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان