شما اینجا هستید

۲-۱ -- Matplotlib

پیغام خطا

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls در book_prev() (خط 775 در /home/molavy/public_html/modules/book/book.module).

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

http://matplotlib.sourceforge.net/

در دسترس است. همچنین بسیاری مستندات و آموزش ها برای آن در آدرس بالا یافت می شود. در اینجا چند مثال از توابعی که ما اغلب در این کتاب به آنها نیاز داریم آمده است.

ترسیم تصاویر، نقاط و خطوط

اگرچه امکان ایجاد یک نمودار میله ای، دایره ای، نمودار پراکندگی و غیره وجود دارد. تنها چند دستور برای اغلب اهداف بینایی ماشین کافی است. از مهمترین آنها این هاست که می خواهیم چیز هایی مانند نقاط سودمند(interest points) و مشابه(correspondences) را نشان دهیم، و همچنین اشیا شناسایی شده با استفاده از نقاط و خطوط نشان دهیم. در اینجا یک مثال از رسم روی یک تصویر با استفاده از چند نقطه و خط نشان داده شده است:

from PIL import Image

from pylab import *

# read image to array

im = array(Image.open('empire.jpg'))

# plot the image

imshow(im)

# some points

x = [100,100,400,400]

y = [200,500,200,500]

# plot the points with red star-markers

plot(x,y,'r*')

# line plot connecting the first two points

plot(x[:2],y[:2])

# add title and show the plot

title('Plotting: "empire.jpg"')

show()

تصویر را روی نمودار می بریم، سپس چهار ستاره با نشانگر ستاره قرمز در موقعیت x و y که از لیست x ها و y ها خوانده ایم ترسیم می کنیم، در انتها خطوط را بین دو نقطه اول از این لیست رسم می کنیم( آبی به صورت پیشفرض است) . تصویر ۱-۲ نتیجه را نشان می دهد.

فرمان show برای نمایش تصویر در محیط گرافیکی و نمایش پنجره گرافیکی استفاده میشود. حلقه نمایش گرافیکی کد شما را تا زمانی که آخرین پنجره باز شده بسته نشود در همان جا متوقف می کند. بهتر است که تابع show را تنها یکبار در هر کد فراخوانی کنید، معمولا در انتها. توجه داشته باشید که PyLab از موقعیت مبدع در گوشه چپ و بالای صفحه که برای تصاویر رایج است استفاده می کند. محور ها برای رفع عیب مفید هستند، اما اگر می خواهید که ترسیم زیبا شود این خط را اضافه کنید:

axis('off')

به این شکل ترسیم مانند تصویر سمت راست در شکل ۱-۲ خواهد شد.

گزینه های زیادی برای رنگ بندی و شکل دهی به ترسیم وجود دارند. مفید ترین آنها در جدول ۱-۱ و ۱-۲ و ۱-۳ نمایش داده شده اند. از آنها به شکل زیر استفاده کنید:

plot(x,y) # default blue solid line

plot(x,y,'r*') # red star-markers

plot(x,y,'go-') # green line with circle-markers

plot(x,y,'ks:') # black dotted line with square-markers

تصویر ۱-۲. مثال هایی از ترسیم با Matplotlib. یک تصویر با نقاط و خط همراه با نمایش محور ها و بدون محور ها.

 

جدول ۱-۱ دستورات رنگ های اولیه برای ترسیم با PyLab

جدول ۱-۲. دستورات شکل دهی به خطوط برای ترسیم با PyLab.

جدول ۱-۳. شکل دهی به نشانگر های رسم برای ترسیم با Pylab

خطوط کانتوری تصویر و نمودار ستونی(Histogram) تصویر

اجازه بدهید با دو مثال از ترسیم های خاص شروع کنیم: خطوط کانتوری تصویر و هیستوگرام تصویر.

نمایش و ترسیم خطوط کانتوری از تصویر (یا خطوط کانتوری از هر دوبعدی دیگری) می تواند خیلی مفید باشد. خطوط کانتوری نیاز به تصاویر طیف سیاه وسفید دارد، دلیل آن این است که کانتورها نیاز دارند که تنها یک مقدار از هر نقطه در مختصات بردارند[x,y]. به این شکل انجام می شود:

from PIL import Image

from pylab import *

# read image to array

im = array(Image.open('empire.jpg').convert('L'))

# create a new figure

figure()

# don't use colors

gray()

# show contours with origin upper left corner

contour(im, origin='image')

axis('equal')

axis('off')

مانند قبل، تابع convert در PIL کار تبدیل به طیف سیاه و سفید را انجام می دهد.

نمودار ستونی تصویر یک ترسیم است که توزیع مقادیر پیکسل ها را نشان می دهد. تعداد ستون ها به تعداد مجموع مقادیر ممکن پیکسل هاست(می توانیم به صورت دستی تنظیم کنیم تا تعداد ستون ها کم شود و به جای هر ستون یک مقدار، برای هر ستون طیفی از رنگ را در نظر بگیریم) و اندازه هر ستون به تعداد پیکسل هایی است که آن مقدار رنگ آن ستون (ممکن است طیفی از رنگ باشد) را دارند. بصری سازی نمودار ستونی (طیف سیاه و سفید) با استفاده از تابع hist انجام می شود:

figure()

hist(im.flatten(),128)

show()

مقدار دوم ورودی تابع hist نشان دهنده تعداد ستون ها است(در اینجا ۱۲۸). به دلیل اینکه تابع hist تنها یک آرایه یک بعدی را قبول می کند. از تابع flatten برای تبدیل هر آرایه به یک آرایه یک بعدی استفاده می کنیم که مقدایر هر ردیف به ترتیب پشت سر هم می آیند. تصویر ۱-۳ ترسیمی از خطوط کانتور و نمودار ستونی را نشان می دهد.

ترسیم کاربر روی تصویر

گاهی اوقات نیاز است که کاربر به صورت پویا و در هنگام نمایش تصویر خطوطی روی بکشد یا نقاطی را علامت بزند، یا اینکه نیاز داریم با ترسیم و دادن داده ها چیز هایی را یاد بدهیم. PyLab همراه با یک تابع ساده برای اینکار می آید، ginput، به ما اجازه این کار را می دهد. مثال کوتاهی از آن در زیر می آید:

from PIL import Image

from pylab import *

im = array(Image.open('empire.jpg'))

imshow(im)

print 'Please click 3 points'

x = ginput(3)

print 'you clicked:',x

show()

این ترسیم از تصویر منتظر می ماند تا کاربر سه بار روی تصویر داخل پنجره کلیک کند. موقعیت[x,y] کلیک ها در لیست x ذخیره می شود.

 

دیدگاه جدیدی بگذارید