تبلیغات
آموزش مطلب

تماس با من

نویسنده :امین باشی
تاریخ:پنجشنبه 12 خرداد 1390-10:15 ق.ظ

کرکره اش رو کشیدم پایین  پس لطفا کامنت نگذارید و برای تماس از رایانامه استفاده کنید.

matlabedu.ir [at] gmail.com



نگانیو کردن عکس

نویسنده :امین باشی
تاریخ:یکشنبه 11 تیر 1385-02:07 ق.ظ

اگر بخواهیم یک عکس سیاه و سفید را نگاتیو کنیم چی کار باید کرد؟

با تمام نرم افزراهای پردازش تصویر به راحتی می‌توانید این کار را انجام دهید.امروز می‌خوایهم یاد بگیریم با مطلب این کارو انجام بدیم.

اولین کار ایجاد یک پنچره برای این کاره

figure('unit','pixel','pos',[50 100 950 600])

a1=axes('unit','pixel','pos',[50 150 400 400],'vis','off');

a2=axes('unit','pixel','pos',[500 150 400 400],'vis','off');

uicontrol('unit','pixel','pos',[225 50 50 25],'string','start','callback','alg(x,a2)');

uicontrol('unit','pixel','pos',[675 50 50 25],'string','exit','callback','close all');

من این پنجره را برای وضوح 1024*768 تنظیم کردم.حالا باید عکس مورد نظر را وارد محیط مطلب کنیم.

x=imread('pic.bmp');

مطلب تصویر را به دو حالت ذخیره می کند.الان با حالت RGB کار می‌کنیم. سه خط بعدی تصویر را به حالت RGB تبدیل می‌کنند.

if ~isrgb(x)

    x=ind2rgb(x);

end

و حالا نمایش تصاویر

y=x;

image('parent',a1,'cdata',x)

image('parent',a2,'cdata',y);

حالا باید یک تابع بنویسیم که تبدیل مورد نظر رو روی عکس انجام بدهد.

 function alg(x,a2)

[m,n,k]=size(x);

yy=[];

hy=image('cdata',yy,'parent',a2);

for i=1:m

    for j=1:n

        if x(i,j,1)== 0 & x(i,j,2)== 0 x(i,j,3)== 0;

            yy(i,j,=[1 1 1];

        else

            yy(i,j,=[0 0 0];

        end

    end

    set(hy,'cdata',yy,'parent',a2)

    drawnow

    حتما همه می‌دانید که دستورات بالا مربوط به یک فایل جداگانه به اسم alg.m است.

در حالت RGB هر تصویر به صورت یک ماتریس m*n*3 ذخیره می‌شود.m,n شماره پیکسل است.در هر m,n سه درایه وجود دارد که رنگ پیکسل است.

خط سوم یک تصویر تهی تعریف می کند و خط چهارم آن را نمایش می‌دهد.با کمک این تصویر نگاتیو شدن تصوی را به صورت سطر به سطر نمایش دهیم.حتی می‌توانیم به صورت پیکسل به پیکسل این کار را انجام دهیم اما برنامه کند می‌شود.

چون تصویر ما سیاه و سفید است  می توانستیم شرط برنامه را به صورت

        if x(i,j,1)== 0

بنوسیم، اما در حالت کلی باید شرط را بطور کامل نوشت.

می‌شود الگوریتم‌های سریع‌تری برای این کار نوشت اما اصول کار همین مطالبی است که یاد گرفتیم.



نوع مطلب : figure 

surfc

نویسنده :امین باشی
تاریخ:جمعه 5 خرداد 1385-09:05 ق.ظ

surfc

این دستور صفحات 3 بعدی سایه دار رسم می‌کند(صفحه سه یعدی؟؟).

شاید بهتر باشد مطلب را با یک مثال شروع کنیم.

البته surf همین کار را بدون سایه انجام می دهد.

[X,Y,Z] = peaks(30);

surfc(X,Y,Z)

colormap hsv

axis([-3 3 -3 3 -10 5])

منظور از صفحه 3 بعدی همین چیزی است که رسم شده.

بر روی محور x ها و در صفحه y=0 منحنی طراز رسم شده است،  برای رسم منحنی طراز می‌توان مستقیما از دستور زیر استفاده کرد.

contour(X,Y,Z)

ساده ترین حالت دستور surf این است که فقط ماتریس Z را به آن بدهیم.

surfc([1 .5 1;0 0.5 0])

باز همون قصه همیشگی وقتی از یک آرگومان استفاده می‌کنیم و ...بقیه اش رو خودتان بلدید، فقط یادتان باشد که Z حتما باید بیشتر از یک سطر یا ستون داشته باشد.در ضمن رنگ صفحه متناسب با ارتفاع آن تعین می‌شود.

surf(X,Y,Z)

در حالت دستور مختصات X و Y را مسقیما وارد می‌کنیم.اگر X و Y بردار باشند ماتریس Z  باید از مرتبه m*n باشد که m طول X و n طول Y است.

حالا ببینیم با این دستور چطور می شه یک مکعب کشید.

surf([0 ;1],[0 ;0],[1 1;1 1])

این که یک خط شد.

surf([0 ;1],[0 ;0],[1 1;0 0])

حالا باید وجه مقابل ان را رسم کنیم.

اگر شما هم مثل من دستور hold on را فراموش کرده باشید، فقط یک وجه بر روی صفحه می‌بینید.

surf([0 ;1],[1 1;0 0],[1 1;1 1])

surf([0 ;1],[1 1;0 0],[0 0 ;0 0])

فکر نمی‌کنید یک جای کار غلط باشه؟

تو اولین مثال یک شکل کاملا پیچیده رسم کردیم و اصلا از دستور holdاستفاده نکردیم!

یک مکعب رو یک کاغذ بکشید و رئوس آن را با شماره 1-8 مشخص کنید،الگوریتم مورد استفاده دستور surf به این صورت است که هر نقطه را به چهار نقطه اطراف خود وصل می‌کند.یعنی نقطه (i,j) را به نقاط        (i+1,j), (i-1,j),(i,j+1),(i,j-1) وصل می‌کند.i,j اندیس‌ مربوط به ماتریسهای X, Y, Z هستند.

نقطه 1 را در درایه (1و1) ماتریس قرار دهید.یعنی اگر نقطه یک در مخنصات (0,1,2) قرار داشت  در ماتریس X درایه (1,1) را صفر قرار می‌دهیم و همینطور برای Z وY

حالا باید نقاط اطراف نقطه 1  را به آن وصل کنیم.در شکل من به نقاط 2 و 3 وصل می‌شود.

      یا

هیچ فرقی نمی‌کنه که از کدام  ماتریس استفاده کنیم.

یک جای خالی مانده، آن را با نقطه‌ای پر کنیم که به هر دو نقطه 2 و 3 وصل شود.در شکل من نقطه چهار است.

حالا اگر ماتریس‌‌های X, Y وZ  به همین ترتیب بسلزیم و از دستور surf استفاده کنیم، وجه 1-2-3-4  رسم می‌شود.بقیه نقاط را هم به همین ترتیب اضافه می‌کنیم.

حالا بقیه وجه را اضافه می کنیم.

خودتان بقیه کار را انجام دهید و با یکبار استفاده از دستور surf مکعب را رسم کنید.


من همیشه مسقیما کد html مطالبم را وارد می کنم(برای اینکه چپ چین و راست چین مطالب درست باشد)اما از وقتی که نسخه جدید میهن بلاگ راه افتاده این کار اصلا فایده ندارد و هر جور دوست داشته باشد مطالب را نشان می دهد.

امروز کلی وقت صرف کردم و مستقیما از ویرایشگر میهن بلاگ استفاده کردم.اما فایده نداشت

همه چیزش بهم ریخته است.



نوع مطلب : surf 

plot

نویسنده :امین باشی
تاریخ:جمعه 22 اردیبهشت 1385-09:05 ق.ظ

خب رسیدیم به دستور معروف پلات(plot)  .این دستور برای ترسیم دو بعدی استفاده می‌شود.

plot(Y)

plot(X1,Y1,...)

plot(X1,Y1,LineSpec,...)

plot(...,'PropertyName',PropertyValue,...)

plot(axes_handle,...)

h = plot(...)

ساده ترین شکل این دستور هنگامی است که تنها از یک  ارگومان استفاده کنیم(حالت اول دستور).Y یک ماتریس است که می‌تواند حقیقی یا مختاط باشد.(اصولا همه چیز در مطلب به صورت ماتریس است).اگرY حقیقی باشد درایه‌های ماتریس در مقابل  اندیس آن رسم می‌شوند.

plot(1,'o')

 ولی اگر Y مختلط باشد مثل آن است که از این دستور استفاده کنیم.

plot(real(Y),imag(Y))

اگر Y بیش از یک ستون داشته باشد، هر ستون Y با یک رنگ نمایش داده می‌شود.

plot([1 2;3 4;2 1],'-.')    

 

plot(X1,Y1,...)

در این شکل دستور می‌توان مقادیر X و Y را وارد کرد.

plot([-1 0 1 0;0 1 0 -1],[1 0 1 2;0 1 2 1])

 

با استفاده از LineSpec می‌شود رنگ و نحوه نمایش هر نمودار را تعین کرد.

plot([-1 0],[1 0],'--',[0 1],[0 1],'-.',[1 0],[1 2],':',[0 -1],[2 1],'-')

 

ویژگیهای(peroperty) دستور پلات  همانند دستور لاین است .

h=findobj(gca,'type','line')

get(h(1))

set(h(1))

 

هنگامی که تعداد محورها بیشتر از یکی است و می‌خواهیم بر روی محوری غیر از محور جاری رسم کنیم، می‌توانیم دستگیره محور را در دستور پلات وارد کرده و .....

h1= subplot(2,2,2);

h2= subplot(2,2,2);

h3= subplot(2,2,3:4);

plot(h1,magic(2))

plot(h2,magic(5))

plot(h3,magic(3))

 



نوع مطلب : plot 

XdataSource

نویسنده :امین باشی
تاریخ:سه شنبه 5 اردیبهشت 1385-04:04 ق.ظ

ویژگی ایکس دیتا سورس (XdataSource) در تمام اشیا نوع پلات (plot object) وجود دارد.این ویژگی مشخص کننده‌ی متغیری است که مقدار ویژگی ایکس دیتا (Xdata) را تعین می‌کند-خودم هم نفهمیدم چی نوشتم بهتراست به  مثال زیر توجه کنید.

 

h=area([2 1]);

data=get(h,{'ydata' 'ydataSource'})

yData= data{1,1}

yDataSource=data{1,2})

دیدید که مقدار وای دیتا(ydata) همان ماتریسی است که آن را رسم کرده‌ایم و مقدار وای دیتا سورس تهی است(چون هیچ متغییری به آن احتصاص نداده‌ایم).

قبل از اینکه بقیه مثال را بخوانید مقدار ویژگی ایکس دیتا را بدست آورید.

xdata=[2 1];

set(h,'xdataSource','xdata')

refreshdata(h)

می‌بینید که شکل نمودار عوض شد، دوباره مقدار ویژگی ایکس دیتا بدست آورید.

تابع ریفرش دیتا(refreshdata) برای بازآرایی اشیا گرافیکی به کار می‌رود، البته  وقتی که منبع داده مشخص شده باشد(یک متغیر به عنوان منبع داده ها مشخص شده باشد).

حالا این به چه دردی می‌خوره؟

axis([0 10 0 3]);

set(gca,'dataAspectRatio',[1 1 1],'box','on')

hold on

xd=[0 1 2];

yd=[1.5 2 1.5];

Color='grbkycm';

for i=1:7

    a(i)=area([0+i 1+i 2+i],yd,'FaceColor',Color(i),'xdataso','xd');

end

yd1=[3 2.5 3];

 

while 10 > 2

    for k=1:7

        for i=1:9

            xd=[0+i 1+i 2+i];

            refreshdata(a(k))

            drawnow

        end

    end

    xd=[0 1 2];

    cla

    for i=1:7

        a(i)=area([0+i 1+i 2+i],yd,'FaceColor',Color(i),'xdataso','xd');

    end

end

فقط حواستان باشد که این یک حلقه بی پایان است.



نوع مطلب : plot object 

نمودار حطا ۲

نویسنده :امین باشی
تاریخ:جمعه 1 اردیبهشت 1385-08:04 ق.ظ

گاهی وقتها لازم است که میزان انحراف از بالا و پایین یکسان نباشد،برای این حالت از این دستور استفاده می‌شود.

errorbar(X,Y,L,U)

ماتریسهای X,Y,L,U باید هم اندازه باشند.ماتریس L مشخص کننده میزان انحراف از پایین و U میزان انحراف از بالا را نشان می‌دهد.

errorbar([1,2],[1,2],[1,2],[2,1])

می‌توان نحوه نمایش(رنگ و ...)منحنی را تعیین کرد برای آشنایی بیشتر با این کار به مطالب مربوط به LineSpec در راهنمای مطلب مراجعه کنید .

 errorbar(...,LineSpec)

به طور مثال

errorbar([1,2],[1,2],[1,2],[2,1],':vk')

برای بدست آوردن دستگیره نمودار خطا می‌توان از این دستور استفاده کرد

h= errorbar(….)

تعدادی از ویژگی های نمودار خطا را بعدا با هم برسی می‌کنیم.

f='-.r*';

h=errorbar([1,2;3 5],[1,1;4 6],f);

get(h)



نوع مطلب : errorbar 

نمودار خطا

نویسنده :امین باشی
تاریخ:پنجشنبه 31 فروردین 1385-04:04 ق.ظ

دستور اروربار(errorbar) برای نمایش میزان انحراف داده ها استفاده می‌شود.

 errorbar(Y,E)

این دستور ماتریس Y را رسم کرده(مثل دستور پلات-plot- ) و میزان انحراف آن را با استفاده از ماتریس E رسم می کند.نمودار خطا برای هر درایه Y با توجه درایه متناظر از E رسم میشود و به صورت یک خط متقارن در بالا و پایین  آن رسم می‌شود.

errorbar(X,Y,E)

برای رسم کردن ماتریس Y در مقابل ماتریس X از این شکل دستور استفاده می‌شود.

ماتریسهای X,Y,E باید هم اندازه باشند.اگر هر سه به صورت بردار باشند،نمودار خطا به صورت  فاصله‌ی E(i) برای هر(x(i)),Y(i)) در بالا و پایین نقطه رسم می‌شود.اگر X,Y,E به صورت ماتریس باشند هر نمودار به صورت فاصله‌ی E(i,j) در بالا و پایین نقطه (x(i),j),Y(i,j)) رسم می‌شود.

باز دوباره تکرار می‌کنم که نحوه رسم کردن نمودار خطا مانند دستور پلات(plot)است.

 

errorbar([3 4;1 -2],[1 -2;3 4],[1 1;1 2])

plot([3 4;1 -2],[1 -2;3 4])

تفاوت این دو دستور تنها در این است که دستور اول میزان خطا را مشخص کرده است.

 



نوع مطلب : errorbar 

Barseries Properties

نویسنده :امین باشی
تاریخ:پنجشنبه 24 فروردین 1385-12:04 ب.ظ

در مطالب قبلی یادگرفتیم که چطور نمودار ستونی رسم کنیم.امروز حالتهای دیگر این دستور را برسی می‌کنیم.

bar(...,width)

در حالت پیش فرض پهنای هر ستون 0.8 می باشد، اکا به راحتی می توان مقدار آن را تغییر داد.

bar([1 2],0.2)

برای تغییر رنگ هر نمودار می توان از  دستور زیر استفاده کرد.

bar(...,'bar_color')

bar([1 2;3 5],.2,'g')

همینطور که می‌بینید این دستور روی تمام نمودارها اثر می‌گذارد.

تقریبا تمام ویژگیهای دستور بار را قبلا برسی کرده‌ایم.

h=bar([1 2]);

get(h)

 set(h,'lineStyle','--','edgeColor','r','faceColor','none')

  set(h,'horizontal','on')

set(h,'baseValue',10)

بعضی وقتها نتیجه دو دستور

get(h)

set(h)

یکسان نیست و این بدلیل این است که بعضی از ویژگیهای شئ (object)مورد نظر فقط خواندنی هستند(read only) و نمی‌توان آنها را تغییر داد.

در لیست ویژگهای بار که با دستور get(h) برگردانده شده است، ویژگی BaseLine قابل مشاهده است.

این ویژگی در حقیقت دستگیره خطی است که نموارها ازروی آن رسم می‌شوند.شما می‌توانید با استفاده از دستگیره آن و ویژگیهای دستور line حالت این خط را عوض کنید.

bar_handle = bar(randn(10,1));

baseline_handle = get(bar_handle,'BaseLine');

set(baseline_handle,'LineStyle','--','Color','red')



نوع مطلب : bar 

کانولوشن

نویسنده :امین باشی
تاریخ:یکشنبه 20 فروردین 1385-10:04 ق.ظ

روش رسم کانولوشن را با یک مثال توضیح می دم.

x=[1 1 1 1 1];

h=[1 1 1 1 1 1 0 0 0 1 1 1 1 1 1];

stem(0:4,x)

stem(2:16,h)

y=conv(x,h);

stem(2,2*length(y)-1,y)

دستورstem برای ترسیم گسسته بکار می رود.



نوع مطلب : convolution 



  • تعداد صفحات :10
  • 1  
  • 2  
  • 3  
  • 4  
  • 5  
  • 6  
  • 7  
  • ...  


All right reserved©2005 Amin Bashi