پردازش تصویر با پایتون یکی از شاخههای مهم علوم کامپیوتر است که به تحلیل و دستکاری تصاویر دیجیتال «Digital images» میپردازد. در سالهای اخیر، پردازش تصویر «Image processing» به بخش اساسی بسیاری از پروژهها «Projects» و فناوریها «Technologies» در حوزههای مختلفی از جمله بینایی کامپیوتری، هوش مصنوعی و یادگیری ماشین تبدیل شده است. پایتون به عنوان یکی از زبانهای محبوب برنامهنویسی در این زمینه شناخته میشود و به دلیل سادگی، خوانایی و قابلیتهای گستردهای که ارائه میدهد، به یکی از انتخابهای اصلی برای انجام عملیات پیچیده پردازش تصویر با پایتون تبدیل شده است.
مقدمه
کتابخانههای مختلفی برای پردازش تصویر با پایتون وجود دارد که هرکدام ابزارهای خاصی برای حل مسائل مختلف دارند. از جمله معروفترین این کتابخانهها میتوان به OpenCV ، Pillow و scikit-image اشاره کرد. این کتابخانهها به کاربران این امکان را میدهند تا عملیات مختلفی از جمله تغییر اندازه تصاویر، اعمال فیلترها، تشخیص لبهها، شناسایی اشیا و حتی تحلیل ویدیو را به راحتی انجام دهند. استفاده از این ابزارها در پروژههای پردازش تصویر با پایتون به توسعهدهندگان کمک میکند تا به نتایج دقیقتر و کارآمدتر دست یابند و از قابلیتهای پیشرفتهتری در تحلیل تصاویر بهرهمند شوند.
پردازش تصویر با پایتون یک حوزه در حال رشد سریع با کاربردهای گسترده است. از این فناوری در صنایع مختلفی از جمله بینایی کامپیوتری، تصویربرداری پزشکی، امنیت و … استفاده میشود. در این مقاله، از سری مقاله های مجله پی استور به بررسی نحوه استفاده از OpenCV پردازش تصویر با پایتون میپردازیم.
پردازش تصویر با پایتون چیست؟
پردازش تصویر با پایتون شاخهای از علم و کاربرد است که به اصلاح و تحلیل تصاویر دیجیتال با استفاده از الگوریتمهای کامپیوتری میپردازد. هدف از پردازش تصویر، بهبود کیفیت بصری تصاویر، استخراج اطلاعات مفید و آمادهسازی تصاویر برای تحلیل یا تفسیر بیشتر است.
پردازش تصویر در پایتون با استفاده از OpenCV
OpenCV (بینایی کامپیوتری متنباز) یک کتابخانه قدرتمند و پرکاربرد برای انجام وظایف پردازش تصویر و بینایی کامپیوتری است. این کتابخانه مجموعهای جامع از توابع و ابزارهایی را ارائه میدهد که توسعه برنامههای مرتبط با تصاویر و ویدئوها را آسان میکند.
در حالی که گرفتن عکس تنها با فشردن یک دکمه انجام میشود، پردازش و بهبود این تصاویر گاهی نیازمند بیش از چند خط کد است. در اینجاست که کتابخانههای پردازش تصویر با پایتون مانند OpenCV به کمک ما میآیند. OpenCV یک بسته متنباز محبوب است که طیف وسیعی از قابلیتها و روشهای پردازش تصویر و بینایی کامپیوتری را پوشش میدهد. این کتابخانه از چندین زبان برنامهنویسی از جمله پایتون، ++C و جاوا پشتیبانی میکند و برای کاربردهای بلادرنگ بهینهسازی شده است.
پردازش تصویر با پایتون
ما عملیات رایجی را که معمولاً برای افزایش دادهها هنگام آموزش مدل استفاده میشوند، بررسی خواهیم کرد.
تغییر اندازه تصویر با پایتون
عملیات مقیاسبندی باعث افزایش یا کاهش اندازه یک تصویر میشود. در OpenCV، برای تغییر اندازه تصویر از تابع ()cv2.resize استفاده میشود. این تابع چندین آرگومان را دریافت میکند که در ادامه توضیح داده خواهند شد.
cv2.resize(src, dsize,interpolation) Here, src :The image to be resized. dsize :The desired width and height of the resized image. interpolation:The interpolation method to be used.
هنگام تغییر اندازه تصویر در پایتون، روش درونیابی تعیین میکند که پیکسلهای جدید چگونه محاسبه شوند. چندین تکنیک درونیابی وجود دارد که هرکدام بین کیفیت و سرعت، موازنه خاصی دارند.
نکته مهم این است که تغییر اندازه تصویر ممکن است باعث کاهش کیفیت آن شود، زیرا پیکسلهای جدید از طریق میانیابی بین پیکسلهای موجود محاسبه میشوند و این میتواند مقداری تاری ایجاد کند.
# Import the necessary libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Load the image image = cv2.imread('Ganeshji.webp') # Convert BGR image to RGB image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Define the scale factor # Increase the size by 3 times scale_factor_1 = 3.0 # Decrease the size by 3 times scale_factor_2 = 1/3.0 # Get the original image dimensions height, width = image_rgb.shape[:2] # Calculate the new image dimensions new_height = int(height * scale_factor_1) new_width = int(width * scale_factor_1) # Resize the image zoomed_image = cv2.resize(src =image_rgb, dsize=(new_width, new_height), interpolation=cv2.INTER_CUBIC) # Calculate the new image dimensions new_height1 = int(height * scale_factor_2) new_width1 = int(width * scale_factor_2) # Scaled image scaled_image = cv2.resize(src= image_rgb, dsize =(new_width1, new_height1), interpolation=cv2.INTER_AREA) # Create subplots fig, axs = plt.subplots(1, 3, figsize=(10, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image Shape:'+str(image_rgb.shape)) # Plot the Zoomed Image axs[1].imshow(zoomed_image) axs[1].set_title('Zoomed Image Shape:'+str(zoomed_image.shape)) # Plot the Scaled Image axs[2].imshow(scaled_image) axs[2].set_title('Scaled Image Shape:'+str(scaled_image.shape)) # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
چرخش تصویر با پایتون
تصاویر را میتوان در جهت عقربههای ساعت یا خلاف آن، به هر زاویهای چرخاند. برای این کار، باید یک ماتریس چرخش تعریف کنیم که شامل نقطه چرخش، زاویه چرخش و ضریب مقیاس باشد.
ایجاد ماتریس چرخش با پایتون
برای ایجاد ماتریس چرخش در OpenCV از تابع ()cv2.getRotationMatrix2D استفاده میشود. این تابع سه مقدار دریافت میکند:
- نقطه مرکز چرخش تصویر
- زاویه چرخش برحسب درجه
- ضریب مقیاس
اعمال تغییرات بر تصویر با پایتون
پس از ایجاد ماتریس چرخش، برای اعمال آن روی تصویر از تابع ()cv2.warpAffine استفاده میشود. این تابع سه مقدار دریافت میکند:
- تصویری که باید تغییر کند
- ماتریس تبدیل
- اندازه تصویر خروجی
زاویه چرخش میتواند مثبت یا منفی باشد. زاویه مثبت تصویر را در جهت عقربههای ساعت و زاویه منفی در خلاف جهت عقربههای ساعت میچرخاند.
ضریب مقیاس نیز برای تغییر اندازه تصویر استفاده میشود. اگر مقدار آن ۱ باشد، اندازه تصویر ثابت میماند، اما مقدار ۲ اندازه تصویر را دو برابر میکند.
# Import the necessary Libraries import cv2 import matplotlib.pyplot as plt # Read image from disk. img = cv2.imread('Ganeshji.webp') # Convert BGR image to RGB image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Image rotation parameter center = (image_rgb.shape[1] // 2, image_rgb.shape[0] // 2) angle = 30 scale = 1 # getRotationMatrix2D creates a matrix needed for transformation. rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale) # We want matrix for rotation w.r.t center to 30 degree without scaling. rotated_image = cv2.warpAffine(image_rgb, rotation_matrix, (img.shape[1], img.shape[0])) # Create subplots fig, axs = plt.subplots(1, 2, figsize=(7, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image') # Plot the Rotated image axs[1].imshow(rotated_image) axs[1].set_title('Image Rotation') # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
انتقال تصویر با پایتون
انتقال تصویر به معنای جابهجا کردن آن در یک چارچوب مشخص در راستای محور x و y است.
ایجاد ماتریس انتقال
برای انتقال تصویر در OpenCV، باید یک ماتریس تبدیل ایجاد کنیم. این ماتریس یک ماتریس ۲×۳ است که میزان جابهجایی را در هر جهت مشخص میکند.
اعمال انتقال به تصویر
برای اعمال این تغییر از تابع ()cv2.warpAffine استفاده میشود که سه مقدار دریافت میکند:
- تصویر ورودی
- ماتریس تبدیل
- اندازه تصویر خروجی
مقادیر tx و ty در ماتریس تبدیل مشخص میکنند که تصویر چقدر در راستای محور x و y جابهجا شود. مقدار tx میزان انتقال در محور x و مقدار ty میزان انتقال در محور y را تعیین میکند.
# Import the necessary Libraries import cv2 import matplotlib.pyplot as plt # Read image from disk. img = cv2.imread('Ganesh.jpg') # Convert BGR image to RGB image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) width = image_rgb.shape[1] height = image_rgb.shape[0] tx = 100 ty = 70 # Translation matrix translation_matrix = np.array([[1, 0, tx], [0, 1, ty]], dtype=np.float32) # warpAffine does appropriate shifting given the Translation matrix. translated_image = cv2.warpAffine(image_rgb, translation_matrix, (width, height)) # Create subplots fig, axs = plt.subplots(1, 2, figsize=(7, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image') # Plot the transalted image axs[1].imshow(translated_image) axs[1].set_title('Image Translation') # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
تغییر شکل تصویر در پایتون
تغییر شکل«Shearing» یک تبدیل هندسی است که باعث کج شدن تصویر در راستای یک یا هر دو محور x و y میشود.
ایجاد ماتریس تغییر شکل در پایتون
برای انجام این تبدیل در OpenCV، باید یک ماتریس تبدیل «Transformation matrix» ایجاد کنیم. این ماتریس یک ماتریس ۲×۳ است که میزان تغییر شکل را در هر جهت مشخص میکند.
اعمال تغییر شکل به تصویر در پایتون
برای اعمال این تغییر از تابع ()cv2.warpAffine استفاده میشود که سه مقدار دریافت میکند:
- تصویر ورودی
- ماتریس تبدیل
- اندازه تصویر خروجی
مقادیر shearX و shearY در ماتریس تبدیل تعیین میکنند که تصویر چقدر در راستای محور x و y دچار تغییر شکل شود. مقدار shearX مقدار تغییر در محور x و مقدار shearY مقدار تغییر در محور y را مشخص میکند.
# Import the necessary Libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Load the image image = cv2.imread('Ganesh.jpg') # Convert BGR image to RGB image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Image shape along X and Y width = image_rgb.shape[1] height = image_rgb.shape[0] # Define the Shearing factor shearX = -0.15 shearY = 0 # Define the Transformation matrix for shearing transformation_matrix = np.array([[1, shearX, 0], [۰, ۱, shearY]], dtype=np.float32) # Apply shearing sheared_image = cv2.warpAffine(image_rgb, transformation_matrix, (width, height)) # Create subplots fig, axs = plt.subplots(1, 2, figsize=(7, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image') # Plot the Sheared image axs[1].imshow(sheared_image) axs[1].set_title('Sheared image') # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
نرمال سازی تصویر با پایتون
نرمالسازی تصویر فرآیندی است که مقدار پیکسلهای یک تصویر را در یک بازه خاص مقیاسبندی میکند. این کار معمولاً برای بهبود عملکرد الگوریتمهای پردازش تصویر انجام میشود، زیرا بسیاری از الگوریتمها زمانی که مقدار پیکسلها در یک محدوده مشخص باشد، بهتر عمل میکنند.
نرمال سازی در OpenCV با پایتون
در OpenCV، تابع ()cv2.normalize برای نرمالسازی تصویر استفاده میشود. این تابع چندین مقدار دریافت میکند:
- تصویر ورودی
- تصویر خروجی
- حداقل و حداکثر مقدار برای مقیاسبندی پیکسلها
- نوع نرمالسازی
- نوع داده تصویر خروجی
نوع نرمالسازی مشخص میکند که پیکسلها چگونه مقیاسبندی شوند. روشهای مختلفی برای نرمالسازی وجود دارد که هر کدام بین دقت و سرعت موازنه خاصی دارند.
کاربرد نرمال سازی با پایتون
نرمالسازی تصویر یک مرحله پیشپردازش رایج در بسیاری از وظایف پردازش تصویر با پایتون است و میتواند عملکرد الگوریتمهایی مانند طبقهبندی تصویر، تشخیص اشیا و بخشبندی تصویر را بهبود ببخشد.
# Import the necessary Libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Load the image image = cv2.imread('Ganesh.jpg') # Convert BGR image to RGB image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Split the image into channels b, g, r = cv2.split(image_rgb) # Normalization parameter min_value = 0 max_value = 1 norm_type = cv2.NORM_MINMAX # Normalize each channel b_normalized = cv2.normalize(b.astype('float'), None, min_value, max_value, norm_type) g_normalized = cv2.normalize(g.astype('float'), None, min_value, max_value, norm_type) r_normalized = cv2.normalize(r.astype('float'), None, min_value, max_value, norm_type) # Merge the normalized channels back into an image normalized_image = cv2.merge((b_normalized, g_normalized, r_normalized)) # Normalized image print(normalized_image[:,:,0]) plt.imshow(normalized_image) plt.xticks([]) plt.yticks([]) plt.title('Normalized Image') plt.show()
خروجی:
[[۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷] [۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷] [۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ... ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷ ۰.۰۷۸۴۳۱۳۷] ... [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ] [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ] [۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ۰.۰۰۳۹۲۱۵۷ ... ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ۰.۰۷۴۵۰۹۸ ]]
تشخیص لبه های تصویر در پایتون
فرآیند تشخیص لبههای تصویر شامل شناسایی لبههای تیز و واضح در تصویر است. این فرآیند در زمینههای شناسایی تصویر یا مکانیابی/تشخیص اشیا بسیار ضروری است. به دلیل کاربرد وسیع، الگوریتمهای مختلفی برای تشخیص لبهها وجود دارد.
در پردازش تصویر با پایتون و برنامههای بینایی کامپیوتری، تشخیص لبه کاننی «Canny Edge Detection» یکی از محبوبترین روشها برای تشخیص لبهها است. در این روش، ابتدا تصویر صاف میشود تا نویز کاهش یابد، سپس گرادیان آن محاسبه میشود و در نهایت یک آستانه به گرادیان اعمال میشود. روش چندمرحلهای تشخیص لبه کاننی شامل مراحل زیر است:
- صافسازی گوسی: تصویر با استفاده از فیلتر گوسی صاف میشود تا نویز حذف گردد.
- محاسبه گرادیان: گرادیان تصویر با استفاده از اپراتور Sobel محاسبه میشود.
- حذف حداکثرهای غیرواقعی: در این مرحله از تصویر گرادیان، لبههای نادرست حذف میشوند.
- آستانهگذاری هیسترزیس: آستانهگذاری هیسترزیس برای شناسایی لبههای قوی و ضعیف به تصویر گرادیان اعمال میشود.
تشخیص لبه کاننی یک الگوریتم قدرتمند برای تشخیص لبه است که میتواند تصاویر لبه با کیفیت بالا تولید کند. با این حال، این روش ممکن است از نظر محاسباتی هزینهبر باشد.
# Import the necessary Libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Read image from disk. img = cv2.imread('Ganesh.jpg') # Convert BGR image to RGB image_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Apply Canny edge detection edges = cv2.Canny(image= image_rgb, threshold1=100, threshold2=700) # Create subplots fig, axs = plt.subplots(1, 2, figsize=(7, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image') # Plot the blurred image axs[1].imshow(edges) axs[1].set_title('Image edges') # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
تاری تصویر در پایتون
تاری تصویر تکنیکی است که جزئیات تصویر را با میانگینگیری از مقادیر پیکسلها در اطراف کاهش میدهد. این کار میتواند برای کاهش نویز، نرم کردن لبهها یا سختتر کردن شناسایی تصویر انجام شود. در بسیاری از وظایف پردازش تصویر، تاری تصویر یک مرحله رایج پیشپردازش است. این تکنیک در بهینهسازی الگوریتمهایی مانند طبقهبندی تصویر، شناسایی اشیا و بخشبندی تصویر مفید است.
در OpenCV، روشهای مختلفی برای تاری تصویر وجود دارد که هرکدام بین قدرت تاری و سرعت موازنه خاصی دارند.
برخی از رایجترین تکنیکهای تاری عبارتند از:
- تاری گوسی: این یک تکنیک تاری محبوب است که از یک کرنل گوسی برای نرم کردن تصویر استفاده میکند.
- تاری میانه: این تکنیک از میانه مقادیر پیکسلها در یک ناحیه برای نرم کردن تصویر استفاده میکند.
- تاری دوطرفه: این تکنیک لبهها را حفظ کرده و در عین حال تصویر را تار میکند.
# Import the necessary Libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Load the image image = cv2.imread('Ganesh.jpg') # Convert BGR image to RGB image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # Apply Gaussian blur blurred = cv2.GaussianBlur(image, (3, 3), 0) # Convert blurred image to RGB blurred_rgb = cv2.cvtColor(blurred, cv2.COLOR_BGR2RGB) # Create subplots fig, axs = plt.subplots(1, 2, figsize=(7, 4)) # Plot the original image axs[0].imshow(image_rgb) axs[0].set_title('Original Image') # Plot the blurred image axs[1].imshow(blurred_rgb) axs[1].set_title('Blurred Image') # Remove ticks from the subplots for ax in axs: ax.set_xticks([]) ax.set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
پردازش مورفولوژیکی تصویر با پایتون
پردازش مورفولوژیکی تصویر مجموعهای از تکنیکهای پردازش تصویر است که بر اساس هندسه اشیا در تصویر عمل میکند. این فرآیندها معمولاً برای حذف نویز، جدا کردن اشیا و شناسایی لبهها در تصاویر استفاده میشوند.
دو عملیات مورفولوژیکی رایج عبارتند از:
- توسعه (Dilation): این عملیات مرزهای اشیا در تصویر را گسترش میدهد.
- فرسایش (Erosion): این عملیات مرزهای اشیا در تصویر را کوچک میکند.
فرایندهای مورفولوژیکی معمولاً در کنار دیگر روشهای پردازش تصویر با پایتون مانند بخشبندی و تشخیص لبه استفاده میشوند.
# Import the necessary Libraries import cv2 import numpy as np import matplotlib.pyplot as plt # Load the image image = cv2.imread('Ganesh.jpg') # Convert BGR image to gray image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # Create a structuring element kernel = np.ones((3, 3), np.uint8) # Perform dilation dilated = cv2.dilate(image_gray, kernel, iterations=2) # Perform erosion eroded = cv2.erode(image_gray, kernel, iterations=2) # Perform opening (erosion followed by dilation) opening = cv2.morphologyEx(image_gray, cv2.MORPH_OPEN, kernel) # Perform closing (dilation followed by erosion) closing = cv2.morphologyEx(image_gray, cv2.MORPH_CLOSE, kernel) # Create subplots fig, axs = plt.subplots(2, 2, figsize=(7, 7)) # Plot the Dilated Image axs[0,0].imshow(dilated, cmap='Greys') axs[0,0].set_title('Dilated Image') axs[0,0].set_xticks([]) axs[0,0].set_yticks([]) # Plot the Eroded Image axs[0,1].imshow(eroded, cmap='Greys') axs[0,1].set_title('Eroded Image') axs[0,1].set_xticks([]) axs[0,1].set_yticks([]) # Plot the opening (erosion followed by dilation) axs[1,0].imshow(opening, cmap='Greys') axs[1,0].set_title('Opening') axs[1,0].set_xticks([]) axs[1,0].set_yticks([]) # Plot the closing (dilation followed by erosion) axs[1,1].imshow(closing, cmap='Greys') axs[1,1].set_title('Closing') axs[1,1].set_xticks([]) axs[1,1].set_yticks([]) # Display the subplots plt.tight_layout() plt.show()
خروجی:
نتیجه گیری
پردازش تصویر با پایتون به دلیل کتابخانههای قدرتمند و متنوعی مانند OpenCV، Pillow و scikit-image به ابزاری بسیار کاربردی در تحلیل و پردازش تصاویر تبدیل شده است. این کتابخانهها قابلیت انجام انواع عملیات پردازشی نظیر تغییر اندازه، فیلتر کردن، شناسایی لبهها و تشخیص اشیا را فراهم میکنند. بهویژه OpenCV با ارائه مجموعهای گسترده از ابزارها و توابع، یکی از محبوبترین گزینهها برای پروژههای بینایی کامپیوتری است. استفاده از این ابزارها در برنامههای مختلف از جمله طبقهبندی تصویر، تشخیص اشیا و پردازش ویدیو به کاربران این امکان را میدهد تا تصاویر را به شیوهای کارآمد و دقیق پردازش کرده و نتایج مطلوبی بدست آورند.