نوشته‌ها

داده کاوی با پایتون-  آماده سازی و تصویرسازی  داده ها


آماده سازی(Importing)

در آموزش قبل به خلاصه ای از روشهای داده کاوی پرداختیم و حالا آموزش خود را با مثال معروف داده های زنبق(iris) ادامه میدهیم:

این دیتاست، شامل ۵۰ نمونه از  ۳ نوع گل زنبق setosa،virginica و versicolor  که جمعا ۱۵۰(۵۰*۳) نمونه میشود، می‌باشد.
داده‌ها به صورت سی اس وی(با کاما از هم جدا میشوند) می‌باشد. داده‌های دریافتی شامل ۵ ستون می‌باشند که ۴ ستون اول ویژگیها و ستون آخر کلاس نمونه ما می‌باشد.



ویژگیها (ورودی ها ، متغیر  مستقل، متغیر پیش بین ):

 

Sepal length , Sepal width , Petal length , Petal width.

کلاسها(خروجی ها ، تارگت، متغیر وابسته یا پاسخ) :

setosa،virginica و versicolor

datamining-python-iris

datamining-python-iris


 

یکی از مواردی که برای داده کاوی مهمه،بحث شناخت کسب و کار و فرایندهای آن میباشد. اگر ما شناخت کافی در مورد داده ها نداشته باشیم نمیتوانیم نظری هم در مورد آنها بدهیم.

Data mining-python-iris

Data mining-python-iris

در این تصویر، ۴ ویژگی (طول و عرض کاسبرگ و گلبرگ گل ها) و کلاس ها به خوبی نمایش داده شده است.

معمولا اولین مرحله از تجزیه و تحلیل داده ها، شامل جمع آوری  و لود داده ها در محیط کاری می شود. ما می توانیم به راحتی با استفاده از قابلیتهای  Python این کار را انجام دهیم:


import urllib2
url = 'http://aima.cs.berkeley.edu/data/iris.csv'
u = urllib2.urlopen(url)
localFile = open('iris.csv', 'w')
localFile.write(u.read())
localFile.close()

در قسمت بالا  از کتابخانه urllib2 برای دسترسی به یک فایل در وب سایت دانشگاه برکلی استفاده و آن را در دیسک ذخیره کردیم. این فایل حاوی دیتاست iris است .  CSV به راحتی میتواند با استفاده از تابع genfromtxt از کتابخانه numpy تجزیه و تحلیل کند.

 


from numpy import genfromtxt, zeros
# read the first 4 columns
data = genfromtxt('iris.csv',delimiter=',',usecols=(0,1,2,3))
# read the fifth column
target = genfromtxt('iris.csv',delimiter=',',usecols=(4),dtype=str)

 

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

 

print data.shape
(۱۵۰, ۴)
print target.shape
(۱۵۰,)

 

همچنین میتوانیم از نام کلاس ها و تعداد آنها مطلع شویم:

 

print set(target) # build a collection of unique elements
(set(['setosa', 'versicolor', 'virginica']

 

تصویرسازی(Visualization )

یک وظیفه مهم هنگام کار با داده های جدید این است که بفهمیم داده ها دارای چه اطلاعاتی هستند و چه ساختاری دارند.
تجسم و تصویر سازی به ما کمک میکند تا این اطلاعات را به صورت گرافیکی کشف کنیم. با استفاده از plot از کتابخانه pylab  که اینترفیسی به matplotlib است،
میتوانیم یک رسم نمودار دو بعدی داشته باشیم که ما را قادر به تجزیه و تحلیل دو بعد از دیتاست میکند و مقادیر یک ویژگی را در برابر مقادیر دیگری تحلیل میکند:

 

 

from pylab import plot, show
plot(data[target=='setosa',0],data[target=='setosa',2],'bo')
plot(data[target=='versicolor',0],data[target=='versicolor',2],'ro')
plot(data[target=='virginica',0],data[target=='virginica',2],'go')
show()

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

 

Data mining-python-iris

Data mining-python-iris

 
در این گراف حدود ۱۵۰ تا نقطه و سه رنگ برا ی نشان دادن کلاسها داریم.
نقطه های آبی نشان دهنده نمونه ای از نمونه ی setosa، قرمز versicolor و سبز نشان دهنده virginica

 

یکی دیگر از روش های معمول برای مشاهده داده ها این است که هیستوگرامی از یکی از ویژگی ها را رسم کنیم.

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

با کد زیر می توان توزیع اولین ویژگی داده های ما (طول sepal) را برای هر کلاس توزیع کرد:


from pylab import figure, subplot, hist, xlim, show
xmin = min(data[:,0])
xmax = max(data[:,0])
figure()
subplot(411) # distribution of the setosa class (1st, on the top)
hist(data[target=='setosa',0],color='b',alpha=.7)
xlim(xmin,xmax)
subplot(412) # distribution of the versicolor class (2nd)
hist(data[target=='versicolor',0],color='r',alpha=.7)
xlim(xmin,xmax)
subplot(413) # distribution of the virginica class (3rd)
hist(data[target=='virginica',0],color='g',alpha=.7)
xlim(xmin,xmax)
subplot(414) # global histogram (4th, on the bottom)
hist(data[:,0],color='y',alpha=.7)
xlim(xmin,xmax)
show()

Data mining-python-iris

Data mining-python-iris

به عنوان مثال ما مشاهده میکنیم که میانگین گل setosa،  طول کاسبرگ کوچکتری نسبت بهvirginica   دارند.

 

https://dzone.com

✨✨✨@pythonabb✨✨✨

🌐https://t.me/pythonabb

 


 


 

پردازش تصویر با پایتون قسمت بیست و هفتم

تبدیل فوریه برای سیگنال یک بعدی

 

بالاخره رسیدیم به بحث شیرین تیدیل_فوریه. 

 

استفاده از تبدیل فوریه برای تجزیه سیگنال نور:

 

python-Image processing-Fourier transformation

python-Image processing-Fourier transformation

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

فوریه

تابعی است که با استفاده از آن می توان هر تابع متناوب را به صورت جمعی از توابع نوسانی ساده(سینوسی، کسینوسی و یا تابع نمایی مختلط ) نوشت.

آنالوگ

 موجی با تغییرات پیوسته(انتگرال فوریه)

دیجیتال

 موجی با تغییرات گسسته(سری  فوریه)

 

 

 

Fourier_series

Fourier series

 

python-Image processing-Fourier transformation

Fourier series

 

سیگنال صوت

 

از مجموعه ای از سينوسها با فرکانس ودامنه وابسته به زمان تشکیل شده است. 

 

این همه بحث در مورد تبدیل فوریه و تجزیه سیگنال به فرکانسهای تشکیل دهنده . کاربردش چیه؟؟ یکی از پر کاربردترین موارد استفاده از آن، فرایند فیلتر در پردازش سیگنال است.
مثلا اگر صدا خش دار و بی کیفیت است یا تصویر وضوح خوبی ندارد با حذف برخی از فرکانسها یا کاهش نویز توسط فیلتر به کیفیت مطلوب میرسونیم.

 

فرکانس یا بسامد

 

تعداد تکرار یک رویداد در واحد زمان.
بر اساس اینکه کدامیک از این سه نوع فرکانس باید حذف شود، سه نوع فیلتر داریم.

 

python-Image processing-Fourier transformation

python-Image processing-Fourier transformation

 

انواع فیلتر :

۱)فیلتر پایین گذر: فرکانسهای بالاتر از یک مقدار معین را حذف میکند و فرکانسهای پایین تر را عبور میدهد.
۲)میان گذر : فقط فرکانس های حد متوسط و میانی عبور داده میشود.
۳) بالا گذر : فرکانسهای پایین تر از یک مقدار معین را حذف میکند و فرکانسهای بالا تر را عبور میدهد.

واقعیت این است که قبل از پردازش اصلی ما یک پیش پردازش داریم تا سیگنالهای خارج از محدوده ی فرکانسی حذف شود. و این کار با فیلتر کردن انجام میشود.

python-Image processing-Fourier transformation

python-Image processing-Fourier transformation

تا اینجا ما سیگنال یک بعدی را بررسی کردیم.ولی تصویر یک سیگنال دو بعدی است


آموزش قبلی

پردازش تصویر با پایتون قسمت یازدهم

تغییر فضاهای رنگ- opencv

هدف

در این آموزش،  نحوه تبدیل تصاویر از یک فضای رنگی به دیگری را  یاد خواهیم گرفت، مانند: BGR \leftrightarrowGray, BGR \leftrightarrow HSV  ، 
علاوه بر این، یک برنامه ایجاد می کنیم که ۳ شیء رنگی را از یک تصویر استخراج کند، و با توابع زیر آشنا خواهید شد:
()cv2.cvtColor () ، cv2.inRange  .

 

در OpenCV بیش از ۱۵۰ روش تبدیل فضای رنگ وجود دارد. اما تنها دو مورد که بیشتر مورد استفاده قرار می گیرند، به BGR ↔ Gray و BGR ↔ HSV را توضیح میدهیم .


برای تبدیل رنگ، از تابع (cv2.cvtColor (input_image، flag استفاده می کنیم که در آن پرچم نوع تبدیل را تعیین می کند.

برای تبدیل  BGR →Gray   از پرچم cv2.COLOR_BGR2GRAY و برای BGR → HSV، از پرچم cv2.COLOR_BGR2HSV استفاده می کنیم. .
برای دریافت پرچم های دیگر، فقط دستورات زیر را در ترمینال پایتون خود اجرا کنید:

>>> import cv2
>>> flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
>>> print flags

 

 (HSV)

یک فضای رنگی مناسب، مدل رنگی HSV است. در این مدل، رنگ دارای ۳ویژگی متمایز است:

Hue: نام رنگ (زرد، سبز، صورتی و..)
Value: روشنایی یا تیرگی رنگ (خاکستری)
Saturation or intensity اشباع یا شدت نور  : خلوص رنگ، روشنایی یا تاریکی ( طیف رنگی قرمز).

نکته

در فضای رنگ HSV، محدوده رنگ [۰،۱۷۹]، محدوده اشباع [۰،۲۵۵] و محدوده مقدار [۰،۲۵۵] است. نرم افزار های مختلف از مقیاس های مختلف استفاده می کنند. بنابراین اگر مقادیر OpenCV را با آنها مقایسه کنید، باید این محدوده ها را نرمال کنید.

 

مدل رنگ HSV چه کاربردی دارد؟

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

در HSV، رنگ آمیزی ساده تر از BGR رنگی است. 

 

 

 

hsv

 

hsv2

hsv3hsv4
  بنابراین در اینجا روش به شکل زیر است:

برنامه،  تصویر را بگیرد
تبدیل از فضای رنگ BGR به HSV انجام دهد.
ما تصویر HSV را برای طیف وسیعی از رنگ آبی وقرمز و سبز، آستانه گذاری(در جلسات بعدی آموزش داده میشود.) میکنیم:
در حال حاضر تنها ۳ شیء آبی و سبز و قرمز را استخراج می کنیم، می توانیم هر آنچه را که می خواهیم انجام دهیم.
کد:

 

import cv2
import numpy as np
img = cv2.imread('bgrtohsv.png')
#تبدیل فضای رنگ bgr to hsv
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV )

lower_blue = np.array([110,50,50])
upper_blue = np.array([120,255,255])

lower_green = np.array([50,50,50])
upper_green = np.array([60,255,255])

lower_red = np.array([0,50,50])
upper_red = np.array([0,255,255])
#آستانه گیری(cv2.inRange())
maskb = cv2.inRange(hsv, lower_blue, upper_blue)
maskg = cv2.inRange(hsv, lower_green, upper_green)
maskr = cv2.inRange(hsv, lower_red, upper_red)
 # and تصویر اصلی با ماسک 
#میشود (cv2.bitwise_and())
resb = cv2.bitwise_and(img,img, mask= maskb)
resg = cv2.bitwise_and(img,img, mask= maskg)
resr = cv2.bitwise_and(img,img, mask= maskr)

cv2.imshow('original image',img)
cv2.imshow('maskb',maskb)
cv2.imshow('maskg',maskg)
cv2.imshow('maskr',maskr)

cv2.imshow('resb',resb)
cv2.imshow('resg',resg)
cv2.imshow('resr',resr)

cv2.waitKey()
cv2.destroyAllWindows()
 

rgbtohsv

 

نکته

 نویز کمی در تصویر وجود دارد. خواهید دید که چگونه آنها را در قسمتهای  بعد حذف میکنیم. این ساده ترین روش در ردیابی شی است.

 

برای پیدا کردن مقادیر HSV چکار باید کرد؟

بسیار ساده است و شما می توانید از همان تابع ()cv2.cvtColor  استفاده کنید.

برای مثال، برای پیدا کردن مقدار HSV سبز، دستورات زیر را در ترمینال پایتون امتحان کنید:

>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
>>> print hsv_green
[[[ ۶۰ ۲۵۵ ۲۵۵]]]

اکنون شما می توانید [H-10، ۱۰۰،۱۰۰] و [H + 10، ۲۵۵، ۲۵۵] را به ترتیب پایین تر و بالاتر محدوده رنگ  قرار دهید.

به غیر از این روش، می توانید از هر ابزار ویرایش عکس مانند GIMP یا هر مبدل آنلاین برای پیدا کردن این ارزش ها استفاده کنید.

اما فراموش نکنید که محدوده های HSV را تنظیم کنید.

Image Segmentation

آستانه گذاری درOpenCV

۱- Image Segmentation
۱- آستانه گداری(Threshold) تصویر چیست؟


بخشبندی تصویر (Image Segmentation)

هدف پردازش تصویر دیجیتال، استخراج اطلاعات مفید(آبجکت، شی، ۲۵۵، ۱، روشن) از تصاویر، بدون کمک انسان است.

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

 

 

خروجی بخشبندی

 

۱) پیکسلهای لبه یا مرز یک بخش. کاربرد:  گوشه ها یا حالت  ناحیه ی مد نظر  را مشخص میکند.

۲) تمام پیکسلهای درون یک بخش. کاربرد: ویژگیهای درونی بخش های تصویر مثل بافت، رنگ و … را مشخص میکند.

لبه: به تغییرات ناگهانی در سطوح خاکستری، تصویر لبه گفته میشود. لبه ها در مرز بین دو ناحیه اتفاق می افتد. 

 

تکنیکهای بخشبندی

۱)  contextual (بخش بندی بر اساس لبه ها)

  تصویر،  با آشکار کردن نقاط یا مرزهایی که در محل آنها،  تغییرات سریع سطوح خاکستری وجود دارند، بخش بندی میشود. 

Contexuall

۲) non-contextual (بخش بندی بر اساس نواحی)

 بر اساس شباهت سطوح خاکستری ، تصویر،  در ابتدا با آستانه گذاری، ناحیه را گسترش داده و با ادغام کردن  بخش ها، بخشبندی میشود. همین جا اشاره کنم که آستانه گذاری از نوع non-contextual میباشد.(ماسکهای آشکار ساز لبه ها، همانند فیلتر بالاگذر حوزه فرکانس  که در قسمتهای بعدی توضیح داده میشوند، میباشند.)

non
 

کاربرد بخشبندی

به عنوان مثال، با استفاده از بخشبندی، میتوان تعداد مربع یا مستطیل را در تصویر شمرد. یا تشخیص چهره ، تشخیص عابر پیاده، اثر انگشت و … را انجام داد. از طرفی گاهی اوقات اصلا لازم نیست برای کسب اطلاعاتی از یک عکس کل تصویر را پردازش کرد. به همین دلیل با استفاده از بخش بندی فقط ناحیه مورد نظر پردازش میشود.

آستانه گداری(Threshold) تصویر چیست؟

آستانه‌گذاری  مناسب‌ترین و ساده ترین تکنیک بخش بندی non-contextual است.
با اعمال آستانه‌گذاری بر روی تصویر در مقیاس خاکستری، تصویری باینری(۰و۱) بدست می‌آید که تصویر به دو بخش کاملا جدا از هم تقسیم میشود.یکی از آنها حاوی پیکسل هایی با مقادیر داده ورودی کوچکتر از آستانه و دیگری مربوط به مقادیر ورودی است که برابر آستانه یا بیشتراز آن هستند. مناطق اول و دوم معمولا به ترتیب با برچسب صفر (۰) و غیر صفر (۱) برچسب گذاری می شوند. آستانه گذاری ، ممکن است دارای چند آستانه باشد که تصویر را به چند بخش مجزا تقسیم میکنند.

برای تصاویر رنگی، سه آستانه(برای هر کانال) باید مشخص شود.

به عبارت دیگر آستانه گذاری شامل تقسیم یک تصویر به دو منطقه است: یک منطقه آبجکت و یک منطقه پس زمینه.
threshold e

تصویر زیر را با دقت مشاهده کنید:

threshold

https://www.learnopencv.com

چند عدد می بینید؟
اکثر شما اعداد زیر را می بینید:
۳۲ (آه، بله، به دقت نگاه کنید)، ۶۴، ۱۰۰، ۱۲۸، ۱۸۰، ۲۰۰ و ۲۵۵٫ اما در تصویر، اعداد بیشتری وجود دارد که به چشم نمیاد.

برای دیدن یک نسخه آستانه گذاری از تصویر اصلی، روی تصویر حرکت کنید .   متوجه خواهید شد که تمام اعداد، سرتاسر  سفید هستند (به عنوان مثال، آنها دارای یک مقدار خاکستری ۲۵۵ میباشند ) و عدد اضافی ۵ وجود دارد. شما متوجه  عدد ۵  در تصویر اصلی  نشدید چون ارزش خاکستری آن ۵ بود.

در حقیقت تمام اعداد در تصویر اصلی یک مقدار خاکستری  برابر با عدد دارند. بنابراین ۲۵۵ روشنترین و ۵ تاریک ترین است.

 خواندن اعداد در تصویر آستانه گذاری شده  آسان تر از خواندن اعداد در تصویر اصلی است. جای تعجب نیست که یک الگوریتم  تصویر آستانه گذاری شده، بسیار ساده تر از تصویر اصلی،  پردازش می کند.
تمام الگوریتم های آستانه گذاری، یک تصویر منبع (src) و مقدار آستانه (thresh) به عنوان ورودی میگیرند، و با مقایسه مقادیر پیکسل در پیکسل  تصویر منبع (x، y) با آستانه،  یک تصویر خروجی (dst) تولید می کند. اگر src (x، y)> thresh باشد، سپس (dst (x، y یک مقدار را تعیین می کند. در غیر این صورت، (dst (x، y مقدار دیگری را ایجادمی کند.

سه روش آستانه ‘گذاری داریم که در قسمتهای بعدی توضیح داده خواهند شد:
+ Simple thresholding
+ Adaptive thresholding
+ Otsu’s thresholding

 

داده کاوی با پایتون-Datamining

 


داده کاوی

 

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

بیایید با هم تصور کنیم انبوه داده ی ما معدن سنگ است(Big_Data )

datamining-big-data

داده کاوی-داده های بزرگ

 

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

دانش

Knowledge-دانش

داده های بزرگ(Big_Data )

 

برای داده_کاوی ما نیاز به حجم زیادی داده داریم که این داده ها، Big_Data نامیده میشود. حجم زیاد یعنی اونقدر داده ها زیاد باشه که به راحتی نشه تجزیه و تحلیل کرد. فقط با ابزار خاص.

از ویژگیهای مهم Big_Data :

 

۱) ارزشمند بودن داده ها(value)

۲)متنوع بودن داده ها(variety

۳)حجیم بودن داده ها(volume)حجم زیاد یعنی اونقدر داده ها زیاد باشه که به راحتی نشه تجزیه و تحلیل کرد. فقط با ابزار خاص.

۴)داده ها به سرعت در حال تغییر و تولید هستند(Velocity)

۵)داده ها به درد بخور و صحیح هستند(veracity)

*****در کل سه ویژگی اول از همه مهمتر هستند. *****

 

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

  1. وارد کردن و تصویر سازی از داده ها
  2.  طبقه بندی و خوشه بندی داده ها
  3. کشف روابط  در داده ها با استفاده از رگرسیون و اقدامات همبستگی
  4. کاهش ابعاد داده ها به منظور فشرده سازی و تجسم اطلاعاتی که به ارمغان می آورد
  5. تجزیه و تحلیل داده های ساختاری

هر موضوع، بر اساس چهار کتابخانه بزرگ پایتون، برای تجزیه و تحلیل و دستکاری داده ها، بررسی  شده است: numpy، matplotlib، sklearn و networkx.

 

 

در قسمت بعدی درمورد فرایند و روشهای داده کاوی  توضیح خواهیم داد.


 


 

خطای Cannot run turtle module

خطای Cannot run turtle module

Traceback (most recent call last):

File “C:/Python/Python36/turtle2.py”, line 1, in <module>

import turtle as t; t.forward(100)

File “C://Python/Python36\turtle.py”, line 3, in <module>

t=turtle.Turtle()

AttributeError: module ‘turtle’ has no attribute ‘Turtle

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

 

image -processing-python-opencv

نمایش تصویرRGB با Matplotlib و تابع تبدیل ()cvtColor در OpenCv

.

۱- نمایش تصویرRGB با Matplotlib</a
۱- ۲خواندن و نمایش تصویر فقط با opencv
۱- ۳خواندن و نمایش تصویر فقط با matplotlib
۱- ۴ خواندن تصویر با opencv و نمایش آن توسط matplotlib
۲- تابع تبدیل ()cvtColor در OpenCv

 

 


نمایش تصویرRGB با Matplotlib

 


می دانیم که کتابخانه  matplotlib ، برای کار با نمودارها و ارقام است. اما اگر خواستیم یک تصویر ساده RGB را نمایش دهیم چه؟ آیا می توانیم با matplotlib انجام دهیم؟

در این قسمت مابه شما نشان می دهیم که چگونه یک تصویر RGB  را با matplotlib فقط در چند خط کد  میشه نشان داد و هرگونه ابهاماتی را که هنگام استفاده از OpenCV و matplotlib وقتی با هم اجرا میشوند، مواجه می شوید روشن کنید.

یک تصویر RGB، که گاهی اوقات به عنوان یک تصویر رنگی واقعی نامیده می شود، به صورت یک آرایه سه بعدی  داده m × n × ۳ ذخیره می شود که کانالهای قرمز، سبز و آبی رنگ را برای هر پیکسل تعریف می کند. رنگ هر پیکسل با ترکیبی از فرمت های فایل های گرافیکی تصاویر RGB، به عنوان تصاویر ۲۴(۸*۳) بیتی ذخیره می شود، حال آنکه هر کدام از کانالهای قرمز، سبز و آبی ۸ بیت هستند.

 

تصویر اصلی

 

خواندن و نمایش تصویر فقط با opencv

کد زیر فقط از opencv برای خواندن و نمایش تصویر استفاده  کرده است. توجه داشته باشید که فرمت رنگ پیش فرض در OpenCV  BGR است (بایت ها معکوس می شوند).

import numpy as np
import cv2
img = cv2.imread('test.png')
cv2.imshow('opencv',img)
cv2.waitKey (0)
cv2.destroyAllWindows ()

خروجی:

11

 

خواندن و نمایش تصویر فقط با matplotlib

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

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
image = mpimg.imread("img2.png")
plt.imshow(image)
plt.show()

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

ولی ما فقط از یک قسمتی از این کتابخانه مربوط به خواندن تصویر است به عنوان mpimg  ، که جایگزین  matplotlib.image،  همچنین از plt که جایگزین matplotlib.pyplot است  برای نمایش استفاده کردیم.
ما می توانیم تصویر زیر را ببینیم:

 

12

در مورد خلاص شدن از محور  و اعداد از کد زیر استفاده میکنیم:

plt.axis(“off”)
plt.imshow(image)
plt.show()
 
 

خواندن تصویر با opencv و نمایش آن توسط matplotlib

import cv2
import matplotlib.pyplot as plt
image = cv2.imread("img2.png") 
 plt.axis("off") 
plt.imshow(image)
plt.show() 

 

اما نتیجه انتظار نمی رفت تصویر زیر باشد:

13

 

چرا نتیجه مورد انتظار نیست؟

پاسخ به عنوان یک نکته در opencv نهفته است.

 

نکته

OpenCV تصاویر RGB را به عنوان آرایه های چند بعدی Numpy معرفی می کند … اما به ترتیب معکوس! به این معنی که تصاویر در واقع در BGR به جای RGB نشان داده شده است!

پس چگونه این مسئله را حل کنیم؟

 

 تصویر را از BGR به RGB   تبدیل   کنیم:


تابع تبدیل ()cvtColor در OpenCv 


این تابع یک تصویر ورودی را از یک فضای رنگی به یکی دیگر تبدیل می کند.  در صورت تغییر به-از فضای رنگ RGB، منظور از کانال ها باید صریح مشخص شود (RGB یا BGR).

cv2.cvtColor(src, code[, dst[, dstCn]]) → dst

پارامتر ها

src : تصویر ورودی:

۸-bit unsigned, 16-bit unsigned ( CV_16UC… )

dst : تصویر خروجی که اندازه و عمق آن باید مثل تصویر ورودی باشد.

code : کد تبدیل فضای رنگ

dstCn – تعداد کانال ها در تصویر مقصد؛ اگر پارامتر ۰ باشد، تعداد کانال ها به صورت خودکار از src و کد به دست می آید.

چرا در OpenCV  فضای رنگ BGR  است؟

 توجه داشته باشید که فرمت رنگ پیش فرض در OpenCV اغلب به عنوان RGB نامیده می شود اما در واقع BGR است (بایت ها معکوس می شوند).

  بنابراین بایت اول یک تصویر استاندارد ۲۴ بیتی،  ۸ بیتی،  آبی ، بایت دوم سبز  و بایت سوم قرمز خواهد بود. بایت های چهارم، پنجم و ششم پیکسل دوم (آبی، سپس سبز، سپس قرمز)، و غیره

محدوده  معمول برای مقادیر کانال R، G و B عبارتند از:

۰ to 255 for CV_8U images

۰ to 65535 for CV_16U images

۰ to 1 for CV_32F images

CV_8U  – یعنی یک پیکسل می تواند مقادیر ۰-۲۵۵ داشته باشد، این محدوده طبیعی برای اکثر فرمت های تصویری و فیلم است.

CV_32F – پیکسل می تواند هر مقدار بین ۰-۱٫۰ داشته باشد، برای برخی از مجموعه محاسبات در داده ها مفید است – اما باید آن را به ۸ بیت برای ذخیره یا نمایش با ضرب کردن هر پیکسل به ۲۵۵ تبدیل کنید.

CV_8U: یک عدد صحیح بدون علامت ۱ بایت (unsigned char).
CV_32S عدد صحیح علامت دار (int).
CV_32F: نقطه شناور ۴ بایت.

 

import numpy as np
 import matplotlib.pyplot as plt
 import cv2
img = cv2.imread('img2.png')
temp = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(temp)
plt.axis('off')
plt.show()

 

نتیجه اسکریپت ما نشان می دهد که رنگ های تصویر ما درست است.


 

 

 

آموزش نصب pip در ویندوز

۱-آموزش نصب pip
۲- متغیرهای محیطی


آموزش نصب pip

 

سلام. در این آموزش قرار است درابتدا، pip را دانلود و نصب میکنیم. سپس در مورد متغیر های محیطی توضیحی کم می دهیم.

دانلود و نصب pip

 

برای نصب کتابخانه های پایتون با استفاده از  pip، ابتدا وارد  اینجا می شویم،  سپس get-pip.py را دانلود می کنیم. برای نصب مراحل زیر را انجام دهید:

 

  1. فایل get-pip.py را دانلود می کنیم.
  2. مکانی که دانلود شده را می یابیم.
  3. در محل دانلود شده ابتدا کلید shif را پایین نگه داشته و  سپس open command را انتخاب می کنیم.
  4. نام فایل را در cmd نوشته و اینتر را می زنیم تا  pip را نصب کند.

 

آموزش-نصب-pip

 

متغیرهای محیطی

 

متغیرهای محیطی (Environment variable) مجموعه‌ای از مقادیر نام‌گذاری‌شده هستند که می‌توانند نحوه رفتار کردن فرایندهای در حال اجرا را تغییر داده و بر روی آنها اثر بگذارند. متغیرهای محیطی مانند path، به برنامه‌ها کمک می‌کنند تا بدانند در چه دایرکتوری فایل‌ها را نصب و ذخیره  کنند.

 

بعد از نصب باید  سیستم  بفهمد که ما pip را نصب کردیم. در ادامه مراحل زیر را به ترتیب انجام می دهیم:

 

  1. بر روی my computer کلیک راست می کنیم.
  2. از سمت چپ advanced system settings  را انتخاب می کنیم.
  3. پنجره ای باز میشود که از بین تب های آن Advanced را انتخاب، و دکمه  Environment Variable می زنیم.
  4.  این مسیر  system variable–>path–>Edit را طی میکنیم.
  5. سپس با باز شدن پنجره  Edit System Vriable، از قسمت  Variable value، به انتهای آخرین آدرس رفته، یک ; میگذاریم و آدرس محل نصب pip را وارد میکنیم.

 

Environment variable

Environment variable

در پایان با نوشتن pip و زدن اینتر تصویر زیر که نمایش دستوراتی برای استفاده از آن هست را میبینید.

 

pip3

pip

بعد از نصب pip، به راحتی میتوانید کتابخانه های پایتون را از این طریق نصب کنید.




۱-پردازش تصویر با پایتون-OpenCV
۲-آموزش نصب pip در پایتون
۳-
کتابخانه های مورد نیاز پردازش تصویر
۴ – خواندن و نمایش فرمت تصویر در پایتون
۵- نمایش تصویرRGB با Matplotlib و تابع تبدیل ()cvtColor در OpenCv

۶-تغییر فضاهای رنگ- opencv
۷-تقسیم و ادغام کانال های تصویری با opencv

 

 

🆔@image_Process
🌐https://t.me/image_Process

 


آموزش قبلی


آموزش بعدی

 

ماشین حساب ساده با پایتون

کاربرد elif

 

import math
from tkinter import *
from tkinter import messagebox
sufra= Tk()
sufra.configure(background='#FF339F')
sufra.title("ماشين حساب")

def show():
 try: 
 a =asq .get() 
 b = bsq.get()
 o = op.get()
 if o == '+':
 csq = a + b
 messagebox.showinfo("جواب ", csq)
 elif o == '-':
 csq = a - b
 messagebox.showinfo("جواب ", csq)
 elif o == '*':
 csq = a * b
 messagebox.showinfo("جواب", csq)
 elif o == '/':
 csq = a / b
 messagebox.showinfo("جواب", csq) 
 else:
 print('بيشتر')
 except ValueError:
 tkMessageBox.showinfo("خطا!") 
asq=IntVar()
bsq=IntVar()
op=StringVar ()
k= Label(sufra, text="ماشين حساب ساده",background='#FF339F').grid(row=0, column=1)
E1 = Entry(sufra, bd =5,textvariable = asq).grid(row=1, column=0)
L1 = Label(sufra, text="عدد اول ",background='#FF339F').grid(row=1, column=1)
E3 = Entry(sufra, bd =5,textvariable = op).grid(row=2, column=0)
L2 = Label(sufra, text="(*/-+) ",background='#FF339F').grid(row=2, column=1)
E2 = Entry(sufra, bd =5,textvariable = bsq).grid(row=3, column=0)
L3 = Label(sufra, text="عدد دوم ",background='#FF339F').grid(row=3, column=1)

B1 = Button(sufra, text="لطفا حاصل را نمايش بده",background='#FFDA33' ,command = show).grid(row=4, column=0)
sufra.mainloop()

44

آموزش پایتون-توابع

تابع یکی از مهمترین مفهومات در ریاضیات است. تابع ساده زیر را در نظر بگیرید:

y=x+1

function(x)=x+1

https://www.mathsisfun.com/sets/function.html

https://www.mathsisfun.com/sets/function.html

x به عنوان ورودی (پارامتر)  و y به عنوان خروجی در نظر گرفته میشود.

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

توابع تحت نام های مختلف در زبان های برنامه نویسی شناخته می شوند، برای مثال : زیرمجموعه ها(subroutines)، روال ها(routines)، روش ها(procedures)، روش ها(methods) یا زیر برنامه ها(subprograms).

تابع در پایتون با با کلمه کلیدی def تعریف و بعد فراخوانی میشود. تابع از سه بخش تشکیل میشود:

نام، پارامتر، بدنه:

 

 

>>> def add(x,y):
	return x+y
>>> add(2,3)
۵
>>>

تابعی برای جمع دو عدد تعریف میکنیم:

در خط اول توسط def نامی برای تابع انتخاب و تعریف شده است. سپس دو پارامتر به عنوان ورود ی تعریف میکنیم . : را میگذاریم و اینتر را میزنیم. سپس تابع را توسط نام آن  و انتخاب دو آرگومان فراخوانی میکنیم. اینتر را زده و نتیجه را مشاهده میکنیم.

کاربرد تابع در tkinter

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

 

import tkinter.messagebox
from tkinter import *
top = Tk()
def helloCallBack():
   messagebox.showinfo( "Hello Python", "Hello World")
B = Button(top, text ="Hello", command = helloCallBack,bg='red', fg='white')
B.pack()
top.mainloop()

45

جمع دو عدد با ماژول tkinter

 

import tkinter.messagebox
import sys
from tkinter import *
top = Tk()
top.configure( bg = 'yellow' )
def sum():
    arg1= a.get()
    arg2 = b.get()
    t=arg1+arg2
    messagebox.showinfo("مجموع ۲ عدد",t )

a=IntVar()
b=IntVar()
Label(top, text="عدد اول",bg='yellow').grid(row=0)
Label(top, text="عدد دوم ",bg='yellow').grid(row=1)
e1 = Entry(top,textvariable = a).grid(row=0, column=1)
e2 = Entry(top,textvariable = b).grid(row=1, column=1)

B = Button(top, text ="نتيجه", command = sum,bg='red', fg='white').grid(row=2, column=1)

top.mainloop()

jam