تبلیغات آموزش مطلب
وبلاگ من
نویسنـــدگان :
امین باشی (73)
موضــــوع ها :
figure (14)
line (1)
uicontrol (1)
uipanel (1)
axes (2)
Organization of Graphics Objects (2)
uimenu (2)
خودم (7)
image (2)
surface (1)
patch (1)
text (5)
light (1)
plot object (2)
area (3)
bar (2)
convolution (1)
errorbar (2)
plot (1)
surf (1)
برازش منحنی (1)
workspace (1)
evalin (1)
GUIDE (1)
dsolve (1)
لاپلاس (1)
سری فوریه (3)
حل عددی IVP (2)
حل معادلات دیفرانسیل پاره ای وابسته به زمان در یک بعد (1)
BVP (1)
حل معادلات خطی (1)
solve (1)
حل pde (5)
subs (1)
آرشیـــو :
خرداد 1388 (1)
مرداد 1386 (1)
بهمن 1385 (2)
دی 1385 (2)
آذر 1385 (1)
شهریور 1385 (6)
مرداد 1385 (6)
تیر 1385 (5)
خرداد 1385 (1)
اردیبهشت 1385 (3)
فروردین 1385 (9)
اسفند 1384 (9)
شهریور 1384 (14)
مرداد 1384 (10)
تیر 1384 (3)
لینكدونی :
MATLAB Wiki
History of Iran
لورن
آرشیو لینكدونی
لینكستان :
متمتیکا
مهندسی صنایع - مهندس امیر
مهندسی شیمی ایران
اخبار نجوم
دانلود رایگان کتاب فیزیک به زبان فارسی
وبلاگ فیزیک ایران
مجله نجوم
انجمن علمی پژوهشی نجم شمال
ماه نو
مطلب نوین
آموزش متلب
میكرو روباتیك
معماری بی نظیر
انجمن مهندسی شیمی ایران
تکنولوژی برتر
گلچین دنیای اینترنت
پروژه های جالب الكترونیك
جادوهای ویندوز
Mathworks
وب كلاس
جنون اینترنت
فرهنگستان زبان و ادب پارسی
جسنجو :
خبرنامه :
نظر سنجی :
امروز :
بازدید های امروز :
بازدید های دیروز :
كل مطالب :
كل نظرها :
كل بازدید ها :
ایجاد صفحه : - ثانیه
نگانیو کردن عکس
اگر
بخواهیم یک
عکس سیاه و
سفید را
نگاتیو کنیم
چی کار باید
کرد؟
با
تمام نرم
افزراهای
پردازش تصویر
به راحتی میتوانید
این کار را
انجام
دهید.امروز میخوایهم
یاد بگیریم با
مطلب این کارو
انجام بدیم.
اولین
کار ایجاد یک
پنچره برای
این کاره
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
بنوسیم،
اما در حالت
کلی باید شرط
را بطور کامل
نوشت.
میشود
الگوریتمهای
سریعتری
برای این کار
نوشت اما اصول
کار همین مطالبی
است که یاد
گرفتیم.
رسم خط
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])
BusyAction & Interruptible
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')
بعد از
رها كردن موس هیچ اتفاقی نمیافتد.
چهاردیواری
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
colormap
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
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 یك رشته به درون تابع
میفرستیم.
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();
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 ها- را بیشتر كرد.
نوشته های پیشین ...
هرگونه استفاده تجاری از مــطالب این سایت بصورت
كتاب٬ نشریه٬ وب و ... ممنوع میباشد
All right
reserved©2005
Amin Bashi