کاهش نویز (noise reduction) یک فرآیند حذف نویز از سینگال است.این سیگنال میتواند مربوط به یک تصویر، ویدئو یا یک فایل صوتی باشد.
تمام دستگاههای ضبط کردن (recording devices) ویژگی هایی دارند که آنها را در معرض نویز قرار میدهد.نویز میتواند بصورت رندوم یا نویز سفید (به سیگنالی گفته میشود که در تابع چگالی توان آن ، توان بهطور یکنواخت در همهٔ فرکانسها توزیع شده باشد) باشد.
۱. مقدمه
هدف از از بینبردن نویزها از سیگنال ،بازسازی تصویرِ تحریف شده و برگرداندن آن به حالت اصلیَش بر اساس مدلهای ایدهآل است که در این پژوهش چگونگی این فرآیند را مورد بررسی قرار میدهیم.
تحریف تصویر میتواند ناشی از موارد زیر باشد :
تضعیف تصویر (image degradation) در سنجش محیط :(مثال: آشفتگی تصادفی جوی)
تضعیف ناهموار از نویز حسگر
تضعیف ناشی از حسگرها : (مثال: حرکت دوربین یا خارج از فوکوس)
اِعوِجاج(تحریف) هندسی(geometric distortion) :(مثال: عکس های زمین که توسط یک دوربین در یک ماهواره گرفته شده است.)
روی تصاویر دو عملیات میتوان انجام داد :
توضیح : این جدول در برنامه ی pages تهیه شده و تصویر آن در سایت http://uupload.ir آپلود شده تا بتوان در این قسمت آن را اضافه کرد و نمایش داد.این فایل در گیت هاب با عنوان attachments قرار داده شده است.
منشاء نویزها میتواند از موارد زیر باشد:
نویز از حسگرها :
.مدارهای الکترونیکی (Electronic circuits)
.سطح نور (Light level)
.دمای سنسور(Sensor temperature)نویز از محیط :
.روشنایی (Lightening)
.اختلال جوی (Atmospheric disturbance)
.سایر سیگنال های الکتریکی / مغناطیسی قوی (Other strong electric/magnetic signals)
انواع نویز :[1]
نویز گاوسی (gaussian noise)
نویز رایلی (Rayleigh noise)
نویز گاما (Gamma noise)
نویز نمایی (Exponential noise)
نویز یکنواخت (Uniform noise)
نویز ضربه ای (salt & pepper = Impulse noise)
ما در این پروژه می خواهیم از الگوریتمهای موجود برای حذف نویز استفاده کنیم.برای انتخاب یک الگوریتم مناسب ، نیاز است نکاتی باید مورد توجه قرار بگیرد.
نکات در انتخاب الگوریتم برای کاهش نویز :
. قدرت کامپیوتر و زمان موجود
. قربانی کردن برخی جزئیات واقعی قابل قبول است اگر اجازه می دهد نویز بیشتری حذف شود.
. توجه به ویژگی های نویز و جزئیات در تصویر
در قسمت کارهای مرتبط به روشهای موجودی اشاره میکنیم که در پردازش تصاویر برای کاهش نویز از آنها استفاده شده است.
۲. کارهای مرتبط
حذف نویز از تصاویر توسط فیلتر کردن : فیلترینگ
نویز تصویر یک اثر جانبی اجتناب ناپذیر است که در اثر ضبط تصویر اتفاق می افتد "نوسانات اجتناب ناپذیر" . در یک دوربین دیجیتال، اگر نور که به لنز وارد می شود با سنسور ناسازگار باشد، نویز تصویر ایجاد می کند.حتی اگر نویز در یک تصویر قابل مشاهده نباشد، نوعی نویز تصویری وجود دارد. هر نوع دستگاه الکترونیکی یک سری نویز دریافت و ارسال میکند و به آن چیزی که در حال ایجاد شدن است انتقال میدهد.بنابراین، برای حذف نویز، فیلترها مورد نیاز هستند.آنها (فیلترها) انواع مختلفی دارند مثل فیلتر هموارساز خطی ،فیلتر میانه ، فیلتر وینر و فیلتر فازی . در این روش فیلتر کردن سه مورد (R G B) به صورت جداگانه انجام می شود.
فیلتر هموارساز خطی : برای حذف نوع خاصی از نویز استفاده می شود. فیلترهای متوسط یا گاوس برای این منظور مناسب هستند.فیلترهای خطی همچنین تمایل دارند که لبه های تیز را خنثی کنند، خطوط و سایر جزئیات تصویر را از بین ببرند و در حضور نویز وابسته به سیگنال ضعیف عمل کنند.فیلترهای هموارکننده تصویر رو مات میکنند چون سطوح روشنایی پیکسلها رو با توجه به همسایههایشان تغییر میدهند.در واقع میزان وضوح تصاویر(sharpness) کم میشود.به دلیل این اختلال، فیلترهای خطی فقط در عمل برای کاهش نویز رضایت بخش هستند.
فیلتر میانه (median filter): الگوریتم فیلتر میانه به شرح زیر است:
قدم اول : یک پنجره دو بعدی W به اندازه 3 * 3 را انتخاب کنید.(میتوان هر اندازه ی مربعی را انتخاب کرد اما در نتیجه تاثیر دارد.) فرض کنید که پیکسل در حال پردازش (C(x، y است. قدم دوم : محاسبه ی میانه ی(Wmed) (در تصویر زیر میانه عدد ۱۱ است) پیکسل ها در پنجره W . قدم سوم : جایگزینی (C(x، y توسط Wmed . قدم چهارم : مراحل یک تا سه را تکرار کنید تا تمام پیکسل ها در کل تصویر پردازش شوند.
مزایا : الف) پیاده سازی آسان است. ب) برای خنثی کردن انواع مختلف نویز استفاده می شود.
معایب : الف) تمایل به حذف جزئیات تصویر در حال کاهش نویز مانند خطوط و گوشه های نازک. ب) عملکرد فیلترینگ میانه در مورد نویز وابسته به سیگنال رضایت بخش نیست. برای حذف این مشکلات، تغییرات مختلف فیلترهای میانه برای نتایج بهتر ایجاد شده است.
۳. آزمایش ها
۳.۱. مرحله ی اول :
۳.۱.۱. توضیحات اولیه :
در مرحله ی اول ، روی چند تصویر آزمایش را انجام میدهیم . آزمایش به این صورت است که چند نوع نویز در تصاویر ایجاد میکنیم ، سپس با روش های موجود برای حذف نویز ، سعی میکنیم آنها ( نویزها ) را حذف کنیم . این روش ها مبتنی بر فیلترهای مکانی (spatial filters) هستند مثل mean filter و median filter .
نکته ای که باید به آن توجه کرد ، این است که فیلترهای مکانی برای همه ی نویز ها کاربرد ندارند و برای حذف یک سری از نویزها باید روش های دیگری اتخاذ کرد که در مرحله ی دوم آزمایشات (بهبود سازی) به آنها میپردازیم.
در پیاده سازی از کتابخانه ی openCV که برای بینایی کامپیوتر می باشد استفاده شده است.
۳.۱.۲. تصاویر استفاده شده :
در پوشه ای با عنوان Images در گیت هاب قرار داده شده است.
۳.۱.۳. توضیح در مورد پیاده سازی و کُد :
ایجاد کردن نویز روی تصاویر ، توسط یک تابع تعریف شده در کُد به نامِ noisy است که آرگومان های ورودی آن ، تصویر و نوع نویز می باشد.نویز های تعریف شده از نوع gaussian ، salt and pepper ، speckle هستند.
کد استفاده شده برای gaussian نویز :
row,col= image.shape mean = 0 var = 100 sigma = var**0.5 gauss = np.random.normal(mean,sigma,(row,col)) gauss = gauss.reshape(row,col) noisy = (image + gauss) for i in range(len(noisy)): for j in range(len(noisy[i])): noisy[i,j] = np.uint8(noisy[i,j]) if( noisy[i,j]<0): noisy[i,j] = 0 elif noisy[i,j]>255: noisy[i,j]=255
کد استفاده شده برای salt and pepper نویز :
در این مرحله بصورت رندوم خانه هایی از عکس انتخاب شده و رنگ آنها سیاه یا سفید میشود.
s_vs_p = 0.5 amount = 0.04 out = np.copy(image) num_salt = np.ceil(amount * image.size * s_vs_p) coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape] out[coords] = 255 num_pepper = np.ceil(amount* image.size * (1. - s_vs_p)) coords = [np.random.randint(0, i - 1, int(num_pepper))for i in image.shape] out[coords] = 0
کد استفاده شده برای speckle نویز :
row,col = image.shape gauss = np.random.randn(row,col) gauss = gauss.reshape(row,col) noisy = image + image * gauss
کد استفاده شده برای [2] mean filter :
با افزایش مقدار اعداد ، نویز بیشتری حذف میشود اما تصویر تار تری خواهیم داشت.
kernel = np.ones((3,3),np.float32)/9 denoised_mean = cv2.filter2D(noisyImage,-1,kernel)
کد استفاده شده برای [3] median filter :
با استفاده از openCV در یک دستور میتوانیم از این الگوریتم استفاده کنیم.عدد ۳ به معنای مربعی با ضلع به اندازه ی ۳ پیکسل است.
denoised_median = cv2.medianBlur(image,3)
۳.۱.۴. نتایج :
طبق آزمایشات به عمل آمده از بین ۲ روش پیاده سازی شده برای حذف نویز ، median filter نتیجه ی دلخواه را می دهد ولی mean filter تصویر واضحی نمیدهد و آن را تار میکند.
نتایج کامل این مرحله که در گیت هابِ مربوطه در پوشه ی Results قرار داده شده ، قابل مشاهده است.
۳.۲. مرحله ی دوم :
۳.۲.۱. توضیحات اولیه:
آزمایش روی نمونه های بیشتر و استفاده از روش های رفع نویز در دامنه ی فرکانس است. در این مرحله ما از تصویر حاوی نویز پریودیک استفاده میکنیم.(توضیح این نویز در قسمت پیوندهای مفید آورده شده است.)در تصاویر از تبدیل فوریه ی گسسته (DFT) برای بدست آوردن دامنه ی فرکانسی استفاده میشود.محاسبه ی DFT به کمک تبدیل فوریه ی سریع (FFT) بدست می آید.با توجه به این محاسبات مؤلفه ی فرکانس صفر (DC) که سمت چپ بالای تصویر است را خواهیم داشت.نیاز است این مولفه را تا وسط تصویر شیفت بدهیم ،در این مرحله تبدیل فرکانسی بدست آمده است.(توضیحات بیشتر در قسمت پایینی)
۳.۲.۲. توضیح در مورد پیاده سازی و کُد :
پس از خواندن عکس
img = cv2.imread('test1.jpg',0)
استفده از FFT برای بدست آوردن تبدیل فوریه ی گسسته که منجر به محاسبه ی DC میشود.
خط سوم مربوط به انتقال مؤلفه ی DC به مرکز تصویر است.
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT) dft_shift = np.fft.fftshift(dft) magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
پیدا کردن فرکانس پایین و ایجاد یک پنجره ی ۶۰ در ۶۰ برای پوشاندن آن.
mask = np.zeros((rows,cols,2),np.uint8) mask[crow-30:crow+30, ccol-30:ccol+30] = 1
حال مراحل را برعکس انجام میدهیم.انتقال به عقب و تبدیل فوریه ی معکوس.
fshift = dft_shift*mask f_ishift = np.fft.ifftshift(fshift) img_back = cv2.idft(f_ishift) img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])
۳.۲.۳. نتایج :
همانطور که مشاهده می شود تصویر کاملا واضح نخواهیم داشت اما خطوط افقی که بصورت پریودیک در تصویر بودند ، تا حد خوبی از بین رفته اند.
فایل main.py در گیت هاب کد مربوط به هر دو مرحله را داراست.
۴. مقایسه :
در این جدول ، فیلتر مناسب برای رفعِ نویز های بررسی شده مشخص شده است.
۵. مراجع
[1]Signal & Image Processing : An International Journal (SIPIJ) Vol.6, No.2, April 2015 , Ajay Kumar Boyat1 and Brijendra Kumar Joshi
[2]Computer Vision: A First Course, Blackwell Scientific Publications, 1988, pp 32 - 34.
Machine Vision: Theory, Algorithms and Practicalities, Academic Press, 1990, Chap. 3.
[3]An Introduction to Image Processing, Chapman and Hall, 1991, p 274.
۶. پیوندهای مفید
در این پژوهش از یک سری اسلایدها مورد مطالعه قرار گرفته که لینکهای مربوطه را در قسمتِ پیوندهای مفید آوردهایم.