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

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

نویسنده :امین باشی
تاریخ:یکشنبه 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 

رسم خط

نویسنده :امین باشی
تاریخ:شنبه 27 اسفند 1384-06:03 ق.ظ

line

دستور line برای رسم خط بکار می رود

line(X,Y)                                                                                                                                     

line(X,Y,Z)                                                                                                                                  

line(X,Y,Z,'PropertyName',PropertyValue,...)

line('PropertyName',PropertyValue,...) low-level-PN/PV pairs only

h = line(...)

حالت اول دستور نقاطی  که با X وY مشخص شده اند را به ترتیب به هم وصل می نماید.اگر فاصله نقاط را خیلی کم در نظر بگیریم می توانیم منحنی هم رسم کنیم.

t = 0:pi/20:2*pi;

hline1 = line(t,sin(t));

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

تعداد سطرهای  X با  تعداد ستونهای Y باید برابر باشد.در حقیقت مطلب هر سطر X را در برابر هر ستون Y رسم می کند ؛ و همینطور در مورد Z

در شکل سوم و چهارم از ویژگی‌های دستور line استفاده می‌شود.در شکل چهارم ماتریس‌های X,Y,Z  استفاده نمی‌شوند و نقاط مورد نظر یا استفاده از

  ویژگی xdata و ... . رسم می‌شود.

line([1 2 4],[1 2 1;2 1 3])

 

 



نوع مطلب : figure 

BusyAction & Interruptible

نویسنده :امین باشی
تاریخ:چهارشنبه 16 شهریور 1384-08:09 ق.ظ

BusyAction & Interruptible

اكثر اشیایی كه در ساختار گرافیكی مطلب دیده می‌شوند ، ویژگیهای مشتركی دارند.امروز به دو ویژگی دیگر از آنها میپردازم.

 

این كدها را در در یك m-file  به اسم plot1 ذخیره كنید.

 x=1:100;

y=x.^2;

hold on

for i=1:99

    plot([x(i) x(i+1)],[y (i) y(i+1)])

    drawnow

end

و كدهای زیر را به اسم plot2

x=1:100;

y=-(x.^2);

hold on

for i=1:99

    plot([x(i) x(i+1)],[y(i) y(i+1)])

    drawnow

end

در خط فرمان دستور زیر را بنویسید.

figure ('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1')

بر روی پنجره باز شده كلیك كرده و تكمه موس را پایین نگه دارید ، بعد از چند لحظه تكمه موس را رها كنید.

می‌بینید كه رسم نمودار اول متوقف شده و نمودار دروم رسم می‌شود.

با دستور get مقدار دو ویژگی یاد شده را مشاهده كنید.

get (gcf,'bus')

get (gcf,'inter')

نكته : در هنگام كار كردن با ویژگیها لازم نیست نام كامل آنها را بنویسید، فقط تا آنجایی كه با بقیه ویژگیها قاطی نشود لازم است كه بنویسید.

مقدار bus برابر با queue(صف) یعنی رخداد(event) دوم بعد از رخداد اول انجام می‌شود.مقدار inter برابر با on یعنی رخداد دوم می‌تواند جلوی رخداد اول را بگیرد.

figure ('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1','Interru ptible','off')

دوباره تكمه موس را پایین نگه داشته و بعد رها كنید.می‌بینید كه رخداد اول یطور كامل انجام شده و بعد رخداد دوم انجام می‌شود.

این دفعه یك پنجره ایجاد كرده و مقدار bus را برابر با cancel و مقدار inter را off می‌كنیم.

figure ('WindowButtonUpFcn','plot2','WindowButtonDownFcn','plot1')

set (gcf,'inter','off')

set (gcf,'bus','cancel')

بعد از رها كردن موس هیچ اتفاقی نمی‌افتد.



نوع مطلب : figure 

چهاردیواری

نویسنده :امین باشی
تاریخ:سه شنبه 15 شهریور 1384-09:09 ق.ظ

Texture

حتما میدانید texture چیه.الان میخواهیم یك چهار دیوتری بسازیم و روی دیوارهاش چند تصویر به عنوان texture قرار دهیم.

اولین كار اینه كه چهارتادیوار رو تعریف كنیم.

set(gca,'box','on')

زائیه دید را تنظیم كرده و برچسب گذاری می‌كنیم.

view(45,45)

xlabel('x')

ylabel('y')

zlabel('z')

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

load clown

حالا با دستور surface دیوارها را تعریف می‌كنیم.

h=surface([0 1],[0 0],[0 0;1 1]);

و بعد تصویر مورد نظر را به صورت texture بر روی سطح قرار می‌دهیم.

set(h,'cdata',X,'FaceColor','texturemap')

مثل اینكه تصویر وارونه است.

set(h,'cdata',flipud(X))

بقیه تصاویر را نیز به همین ترتیب بر روی دیوار قرار می‌دهیم.

surface([0 1],[1 1],[0 0;1 1],flipud(X),'FaceColor','texturemap')

 

load spine

surface([0 0],[0 1],[0 1;0 1],(X),'FaceColor','texturemap')

load flujet

surface([1 1],[0 1],[0 1;0 1],(X),'FaceColor','texturemap')

یك مقدار رنگش بده

load clown

colormap(map)

اینم یه دور درجا به افتخار جمع

for i=0:360

view(45-i,45)

drawnow

end



نوع مطلب : figure 

colormap

نویسنده :امین باشی
تاریخ:چهارشنبه 9 شهریور 1384-08:08 ق.ظ

Colormap

دستور زیر را در خط فرمان وارد كنید.

Colorbar

در صورت استفاده ازاین دستور یك پنجره باز شده(یا بر روی پنجره جاری) و یك ستون رنگی در سمت راست آن نمایش داده می‌شود. حالا این دستور را استفاده كنید.

colormap (cool)

می‌بینید كه رنگ ستون تغیر كرد.

Colormap(معادل نتونستم پیدا كنم) یك ماتریس m در 3 است كه مقادیر درایه‌های آن عددی حقیقی بین 0 و 1 است. هر ردیف در حقیقت نشان دهنده یك رنگ است.

Kth ردیف معادل Kth رنگ است.

 image([3 20])

دستور بالا رنگهای  شماره 3 و 20 از colormap را نمایش می‌دهد.اگر نوع colormap را عوض كنید مثلا با این دستور

colormap (summer)

image ([3 20])

در هنگام رنگ‌آمیزی پنجره(وقتی كه رنگ‌ها بطور مستقیم تعبن نشوند).مطلب با استفاده از colormap به رنگ‌آمیزی پنجره اقدام می‌كند.

load flujet

image (X)

colormap (jet)

حالاcolormap را عوض كنید و تفاوت را ببینید.

colormap (winter)

مطلب انواع مختلفی از colormap ها را پشتیبانی می‌كند. برای دیدن آنها دستور زیر را در  خط فرمان بنویسید. در پنجره colormapeditor و منوی tools  می‌توانید لیست colormap های تعریف شده را مشاهده كنید.

colormapeditor



نوع مطلب : figure 

نویسنده :امین باشی
تاریخ:یکشنبه 6 شهریور 1384-05:08 ق.ظ

Tag

تقربیا همه توابعی كه آرگومانهایی به صورت زوج اسم/ویژگی (name/property) قبول می‌كنند

ویژگی tag  را دارند. مقدار این ویژگی یك رشته(string) است كه توسط كاربر تعریف می‌شود. و هرچیزی می‌تواند باشد.

هنگامی شما برنامه‌هلی خود را به صورت function می‌نویسید، متغبرها به صورت محلی(local) تعریف می‌شوند یعنی در خارج از تابع تعریف نشده‌ هستند.اگر بخواهیم از آنها در جای دیگری هم استفاده كنیم باید آنها را به صورت سراسری (global)   تعریف كنیم یا به صورت آرگومان به درون دیگر توابع بفرستیم.اصولا نوشتن متغیرها به صورت سراسری از زیبایی برنامه كم می‌كند.

در مورد اشیایی(object) كه ویژگی tag را دارند می‌توان با استفاده از تابع findobj دستگیره شی مورد نظر و در نتیجه بقیه ویژگیهای آن را پیدا كرد.

function test_tag

    fig=figure ('tag','1');

    test1

    test2

    find_tag('1')

    find_tag('2')

    find_tag('3')

function test1

    fig=figure ('tag','2');

function test2

    fig=figure ('tag','3');

function find_tag(n)

    fig=findobj ('tag',n);

    figure (fig);

    plot([1 str2num(n)])

در این مثال 4 تابع مختلف تعریف كردیم كه 3 تا از آنها تابع داخلی است.

دستور fig=findobj('tag',n) شیی را كه مقدار ویژگی tag آن برابر با n  است ، پیدا می‌كند.

دقت كنید كه مقدار ویژگی tag یك رشته است. و ما نیز در هنگام استفاده از find_tag یك رشته به درون تابع می‌فرستیم.



نوع مطلب : figure 

نویسنده :امین باشی
تاریخ:جمعه 4 شهریور 1384-12:08 ق.ظ

Pop-up

ویژگی deletefcn كنترل كننده‌‌ی عمل انجام شده در هنگام بسته شده پنجره است فرق آن با ویژگی CloseRequestFcn آن است كه ویژگی deletefcn در بسته شدن پنجره دخالت

 نمی كند اما  CloseRequestFcn كنترل كتتده‌ی بسته شدن پنجره است و با استفاده از آن

می‌توان جلوی بسته شدن آن را گرفت.

برای ساختن pop-up اول باید یك تابع بازگشتی داشته باشیم.

fig=@()figure('WindowStyle','modal','createfcn','ezplot(''sin'')','deletefcn','fig()');

به ویژگی deletefcn توجه كنید. مقدار این ویژگی خود تلیع fig است.

حالا كافی است كه تابع fig را اجرا كنیم اما دقت كنید كه از دست پنجره‌ی ایجاد شده نمی‌توانید راحت شوید هر بار كه آن را به بندید دوباره باز می‌شود. حتی نمی توانید از مطلب خارج شوید. الیته این مشكل مثل دفعه قبل كه با ویژگی CloseRequestFcn این كار را كردیم نیست. در حالت فبل یا یك دستور set می توانستیم مشكل را حل كنیم اما این بار لازم است ابتدا ctrl+c همزمان فشار دهید بعد با استفاده از set مقدار ویژگی deletefcn را تغیر دهید.

fig();

 



نوع مطلب : figure 

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

CreateFcn

با استفاده از این ویژگی می توان در هنگام ایجاد یك پنجره یا یك محور یا هر شیء دیگری كه این ویژگی را داشته باشد عمل خاصی را انجام داد.

مفدار این ویژگی در حالت پیش فرض تهی است.شما می توانید یك یا چند دستور مطلب را به عنوان مقدار این ویژگی استفاده كنید.

 

   Anonymous Functions

یكی از راهای ایجاد تابع در مطلب و ساده ترین آن استفاده از قالب Anonymous Functions می باشد.

fhandle = @(arglist) expr

در این روش در یك خط تابع تعریف می شود . fhandle دستگیره تابع است و در حقیفت نام تابع . arglist لیست آرگومانهای تابع است كه با كاما از هم جدا شده اند. و expr نشان دهنده عملی است كه تابع انجام می دهد.

sqr = @(x) x.^2;

figure ('CreateFcn','y=1:10; plot(sqr(y))');

این دستور یك پنجره ایجاد كرده و بر روی آن تابع x.^2 را رسم می كند. البته شكل حاصل یك خطه شكسته است نه یك منحنی ، برای هموارتر شدن منحنی باید تعداد نقاط آن –تعداد y ها- را بیشتر كرد.



نوع مطلب : figure 



  • تعداد صفحات :2
  • 1  
  • 2  


All right reserved©2005 Amin Bashi