داده کاوی با پایتون_قسمت پنجم

کتابخانه sklearn – طبقه بندی

کتابخانه sklearn شامل اجرای بسیاری از مدل ها برای طبقه بندی است و در این بخش، نحوه استفاده از Bayes Naive Gauss را برای شناسایی گل های iris به صورت Setosa، Versicolor یا Virginica  خواهیم دید. برای این منظور، بردار رشته هایی را که شامل کلاس است را به اعداد صحیح ، تبدیل می کنیم:

t = zeros(len(target))
t[target == 'setosa'] = 1
t[target == 'versicolor'] = 2
t[target == 'virginica'] = 3
print t
[۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫
 ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫ ۱٫
 ۱٫ ۱٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫
 ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫ ۲٫
 ۲٫ ۲٫ ۲٫ ۲٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫
 ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫
 ۳٫ ۳٫ ۳٫ ۳٫ ۳٫ ۳٫]

از این جا به بعد طبقه بند را کشف کرده و آموزش میدهیم.

from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(data,t) # آموزش دیتاست iris
GaussianNB(priors=None)

طبقه بندی را می توان با متد predict (پیش بینی)،  انجام داد و آن را با یکی از نمونه ها،  آسان،  تست کرد:


print (classifier.predict(data[[0]]))
print t[0]
[۱٫]
۱٫۰
print classifier.predict(data[[1]])
[۱٫]
۱٫۰
print classifier.predict(data[[100]])

print t[100]
[۳٫]
۳٫۰
python-datamining

داده کاوی با پایتون_قسمت چهارم

طبقه بندی(Classification)

طبقه بندی، یک تابع داده کاوی است که نمونه ها(samples ) را در یک مجموعه داده برای تعیین کلاس ها اختصاص می دهد.
مدل هایی که این تابع را اجرا می کنند، طبقه بند ، نامیده می شوند.
دو روش اساسی برای استفاده از طبقه بند وجود دارد: آموزش و طبقه بندی.
آموزش(Training ): مثلا من میام ۱۰۰ نمونه گل iris را انتخاب و با توجه به ویژگی های آنها ، آنها را به ۳ دسته(برچسب یا تارگت یا کلاس) تقسیم میکنم.
طبقه بندی(Classification ): حالا که ۱۰۰ نمونه را آموزش دادم که جزو کدام دسته باشند، نوبت به این میرسه که مثلا ۵۰ نمونه ناشناس ، توسط یک طبقه بند بررسی شوند که به کدام کلاس تعلق دارند.

python-datamining

داده کاوی با پایتون_قسمت سوم

  آماده سازی و تصویرسازی  داده ها

 

آماده سازی(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

python-Image processing-Fourier transformation

 

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

python-Image processing-Fourier transformation

python-Image processing-Fourier transformation

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

 

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

تفاوت موج و سیگنال

 

برای ادامه بحث به گیف زیر خوب توجه کنید.  کاربرد تبدیل فوریه که یک سیگنال را از حوزه زمان به حوزه فرکانس تبدیل میکند.

 

Fourier_series_and_transform

بعد از توضیح تبدیل سیگنال تک بعدی به حوزه فرکانس، به تبدیل حوزه فرکانسی  سیگنال دوبعدی (تصویر) از حوزه مکانی با استفاده از تبدیل فوریه میپرازیم. فیلتر بالاگذر و پایین گذر  را هم در ادامه بررسی میکنیم.

signal

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

دونوع سگنال داریم:

  1. سیگنال آنالوگ یا پیوسته در دنیای واقعی:  این نوع سیگنال،  شبیه موج در زمان های مختلف مقادیر مختلفی میگیره .
    مانند:
    رادیو، تلفن، تلویزیون های قدیمی و…
  2. سیگنال دیجیتال یا گسسته: در زمانهای مختلف ممکنه مقدار بگیره، ممکنه مقدار نگیره.
    مثل کامپیوترها(۰و۱)

برای تبدیل سیگنال پیوسته به دیجیتال به عنوان مثال سیگنال صوت ( ذخیره و پردازش صدا به صورت دیجیتال در کامپیوتر) باید نمونه برداری (متناوب یا پریودیک) کنیم.

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

photo_2018-06-09_13-26-13

 

wave

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

موج: ارتعاش و نوسانی که اغلب حامل انرژی بوده و در فضا یا فضازمان منتشر می‌شود را «موج» می‌گویند.#ویکی

 

photo_2018-06-09_13-26-21

 

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

photo_2018-06-09_13-26-30

photo_2018-06-09_13-26-39

 

 

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

Smoothing_Images

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

۲D Convolution ( Image Filtering )

اهداف این بخش:

  • مات کردن تصاویر با استفاده از فیلتر های پایین گذر مختلف 
  • اعمال فیلتر های سفارشی بر روی تصاویر (۲D convolution)

همانند سیگنالهای تک بعدی، تصاویر(سگنالهای دو بعدی) را هم میتوان با استفاده از فیلترهای پایین گذر(LPF)، بالا گذر (HPF) و … فیلتر کرد. LPF در برطرف کردن نویز یا تارشدن تصویر کمک می کند. HPF در پیدا کردن لبه ها در یک تصویر کمک می کند. کتابخانه OpenCV با استفاده از تابع ()cv2.filter2D، پیمایش (convolve ) یک هسته با یک تصویر را فراهم میکند.

K =  \frac{1}{25} \begin{bmatrix} 1 & 1 & 1 & 1 & 1  \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 \end{bmatrix}

 

 

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

 

import cv2
 import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('opencv_logo.png')
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img,-1,kernel)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Averaging')
plt.xticks([]), plt.yticks([])
plt.show()

یک آرایه۵×۵ که تمام عناصر آن از یک تشکیل شده باشه، توسط دستور زیر انجام میگیره:
np.ones: آرایه ای از ۱ درست میکند:

np.ones((5,5),np.float32)
array([[ 1., 1., 1., 1., 1.],
[ ۱٫, ۱٫, ۱٫, ۱٫, ۱٫],
[ ۱٫, ۱٫, ۱٫, ۱٫, ۱٫],
[ ۱٫, ۱٫, ۱٫, ۱٫, ۱٫],
[ ۱٫, ۱٫, ۱٫, ۱٫, ۱٫]], dtype=float32)

در نهایت تقسیم بر ۲۵ میشود.

اپن سی وی(opencv) این کار را با تابع cv2.filter2D  انجام میدهد.

cv2.filter2D(img,-1,kernel)

همانطور که مشاهده میکنید این تابع ۳ پارمتر دارد:

 

cv.filter2D (src, dst, ddepth, kernel, anchor = new cv.Point(-1, -1), delta = 0, borderType = cv.BORDER_DEFAULT)

کل پارامترهایی که این تابع میگیره اینها هستن.

۱) src: تصویر ورودی
۲) dst : تصویر خروجی که از نظر اندازه و تعداد کانال با تصویر ورودی یکی است
۳) ddepth: عمق دلخواه تصویر خروجی
۴)کرنل
۵)و….

اگر عمق -۱ باشد یعنی عمق تصویر خروجی باید مانند تصویر ورودی باشد.تصویر ورودی میتونه هر تعداد کانال داشته باشه که به صورت جداگانه پردازش شوند ولی عمق باید  CV_8U, CV_16U, CV_16S, CV_32or  CV_64باشد

دقتdepth :تعداد بیتهای در نظر گرفته شده برای هر پیکسل در کامپیوتر
توجه کنید اگر ddepth مقدار -۱ بگیرد یعنی نتیجه نوع داده تصویر خروجی برابر تصویر ورودی است مثل np.uint8 یعنی ۸بیت ۰-۲۵۵(cv2.CV_8U )
الان تصویر ورودی من دارای اطلاعات زیر میباشد:

img = cv2.imread(‘face.png’)
»> img.dtype
dtype(‘uint8’)

در opencv ،  هر پیکسل در تصویر رنگی،  نماینده ۳ پارامتر(کانال) است: آبی، سبز و قرمز. هر کدام از این پارامتر ها مقدار ۰-۲۵۵ میگیرند. به طور مثال آبی مطلق :

b g r
۲۵۵ ۰ ۰

87

 

تارشدگی تصویر (صاف کردن تصویر)

برای حذف نویز مفید است. در واقع محتوای فرکانس بالا را حذف می کند (به عنوان مثال: نویز، لبه ها)، بنابراین لبه ها ، دچار تغییرات خیلی کمی میشوند .

OpenCV تقریبا چهار نوع تکنیک صاف کردن تصویر را فراهم می کند.

۱)Averaging

این کار توسط پیمایش یک فیلتر جعبه(کرنل) نرمال شده با تصویر ورودی، با استفاده از  cv2.blur () یا cv2.boxFilter () انجام می شود. ما باید عرض و ارتفاع هسته را مشخص کنیم. یک فیلتر جعبه نرمال شده ۳ × ۳ مانند زیر می باشد:

 

7e

import cv2
import numpy as np
from matplotlib import pyplot as plt>
img = cv2.imread('8.png')
blur = cv2.blur(img,(5,5))
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(dst),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()

9

۲) Gaussian Blurring

اینجا به جای فیلتر جعبه، از هسته گوسی  استفاده میشود. تابع مورد استفاده، cv2.GaussianBlur() میباشد. باید عرض و ارتفاع هسته را  که مثبت و فرد است، مشخص کنیم :

blur = cv2.GaussianBlur(img,(5,5),0)

10

 

۳) Median Blurring

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

 median = cv2.medianBlur(img,5)

 

13

 

 

 

۴) Bilateral Filtering

فیلتر دو طرفه توسط تابع،   ()cv2.bilateralFilter ، در حذف نویز با حفظ لبه ها بسیار موثر میباشد.

import cv2
 import numpy as np
 from matplotlib import pyplot as pltimg = cv2.imread('14.png')
 temp = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
 blur = cv2.bilateralFilter(temp,9,75,75)plt.subplot(121),plt.imshow(temp),plt.title('Original')
 plt.xticks([]), plt.yticks([])
 plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
 plt.xticks([]), plt.yticks([])
 plt.show()

15

ببینید، بافت روی سطح رفته است، اما لبه ها هنوز هم حفظ می شوند. 

https://commons.wikimedia.org/wiki/File:3D_Convolution_Animation.gif

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

Convolution

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

۱٫کانولوشن حوزه مکان

 

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

کانولوشن بر روی سیگنال یک بعدی را  مشاهده میکنید :

 

jjure

 

 می توانیم کانولوشن را در سیگنالهای ۲D نیز  اعمال کنیم. برای کانولوشن ۲D، هسته  روی هر پیکسل از  تصویر حرکت میکندیعنی پیمایش میکند  و عمل ضرب  تصویر ورودی و هسته، و اضافه کردن آنها – نتیجه ارزش جدیدی از تصویر است.

این قسمت یک مثال ساده از کانولوشن  در فضایی ۲D است. تعریف کانولوشن ۲D و چگونگی پیمایش در ۲D در اینجا توضیح داده شده است.

 

 

 

 

x[m,n]

ورودی

h[m,n]

هسته

y[m,n]

خروجی

 

 

 

 

 

 

 

 

 


 

 

y[0,0]y[0,0]

y[1,0]y[1,0]

y[2,0]y[2,0]

y[1,1]y[1,1]

y[2,1]y[1,1]

y[2,1]y[2,1]

y[0,2]y[0,2]

y[1,2]y[1,2]

y[2,2]y[2,2]

../_images/numerical_no_padding_no_strides.gif

آموزش php قسمت اول

php یک زبان برنامه نویسی قدرتمند در سمت سرور برای ایجاد وب سایت های پویا و تعاملی است.

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

سینتکس PHP بسیار شبیه به Perl و C است .php اغلب با Apache (وب سرور) بر روی سیستم عامل های مختلف استفاده می شود. همچنین از ISAPI پشتیبانی می کند و می تواند با IIS مایکروسافت در ویندوز مورد استفاده قرار گیرد.

 


پیشنیازها:

قبل از آموزش این زبان شما باید با مفاهیم زیر آشنایی داشته باشید:

  • html
  • دانش کمی از  اسکریپت نویسی

php چیست؟

  • php برگرفته از PHP: Hypertext Preprocessor
  • php  یک زبان اسکریپتی سمت سرور مانند asp است
  • در php اسکریپتها بر روی سرور اجرا میشوند
  • php  از دیتابیس های (MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Generic ODBC, ….)  پشتیبانی میکند
  • php یک نرم افزار منبع باز است
  • دانلود و استفاده از آن رایگان است.

فایل php چیست؟

  • فایلهای php میتوانند شامل متن، تگهای html و اسکریپت باشند
  • فایلهای php به عنوان html ساده به مرورگر برگردانده میشوند
  • فرمت این فایلها: “.php”, “.php3”, یا  “.phtml”

MYSQL چیست؟

  • MYSQL  پایگاه داده سرور
  • MYSQL  برای اپلیکشن های بزرگ و کوجک ایده آل است
  • MYSQL  از استاندارد sqlپشنیانی میکند
  • MYSQL در تعدادی از سیستم عاملها کامپایل میشود
  • دانلود و استفاده از آن رایگان است

PHP + MySQL

ترکیب این دو cross-platform است . یعنی بر روی هر سیستم عاملی در سرور اجرا میشود

 

 

 

 

 

 

 

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

 

 

Background Subtraction

 

تفریق تصویر

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

چندین الگوریتم برای این منظور معرفی شدند. OpenCV سه الگوریتم را اجرا کرده است که بسیار آسان است. ما آنها را توسط فیلم زیر،  یک به یک می بینیم.

 

 

https://github.com/opencv/opencv/blob/master/samples/data/vtest.avi

 

BackgroundSubtractorMOG

import numpy as np
import cv2
cap = cv2.VideoCapture('vtest.avi')
fgbg = cv2.createBackgroundSubtractorMOG()
while(1):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    cv2.imshow('frame',fgmask)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()
resmog

 

BackgroundSubtractorMOG2

import numpy as np
import cv2
cap = cv2.VideoCapture('vtest.avi')
fgbg = cv2.createBackgroundSubtractorMOG2()
while(1):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    cv2.imshow('frame',fgmask)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()
https://docs.opencv.org/3.3.0/db/d5c/tutorial_py_bg_subtraction.html

https://docs.opencv.org/3.3.0/db/d5c/tutorial_py_bg_subtraction.html

 

BackgroundSubtractorGMG

import numpy as np
import cv2
cap = cv2.VideoCapture('vtest.avi')
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
fgbg = cv2.createBackgroundSubtractorGMG()
while(1):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    fgmask = cv2.morphologyEx(fgmask, cv2.MORPH_OPEN, kernel)
    cv2.imshow('frame',fgmask)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
cap.release()
cv2.destroyAllWindows()
 
resgmg