انجمن گروه موج سازان

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

[عکس: avgSource.jpg]
تصویر بدون نویز

[عکس: avg%20(1).jpg]
تصویر نویزدار

[عکس: avg%20(2).jpg]
تصویر نویزدار

[عکس: avg%20(3).jpg]
تصویر نویزدار

[عکس: avg%20(4).jpg]
تصویر نویزدار

[عکس: avg(result).jpg]
میانگین تصاویر نویزدار

شبه کد زیر نحوه پیاده سازی عملگر میانگین را نشان می دهد :
کد پی‌اچ‌پی:
Procedure Averagebmp1 bmp2 :Image)
Begin
  Result
:Image
  
For 1 To Height Do
    For 
1 To Width Do
      
Result.Pixelsj] = ( bmp1.Pixels] + bmp2.Pixels] ) /2
    End 
For
  
End For
End 

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

پردازش تصویر در MATLAB :
برای میانگین گیری از تصویر در محیط MALTAB به صورت زیر می توان عمل کرد :

کد پی‌اچ‌پی:
>> im imread('cameraman.tif');
>> 
imshow(im);
>> 
im1 imread('rice.png');
>> 
imshow(im1);
>> 
imAvg imadd(im,im1) ./ 2;
>> 
imshow(imAvg); 

منبع
سلام اگر بخواهیم از چند تصویر (مثلا یک ارایه 257 تایی از تصویر) میانگین بگیریم باید چه کار کنیم با توجه به uint8 بودن تصویر ؟
با تشکر
سلام
با کد بالا مشکل داشتید؟فکر میکنم کاره شمارو راه میاندازه!
اگه تعداد تصویراتون بیشتر از 2باشه (مثلا3) کد رو باید اینطوری بنویسید:
Result.Pixels[ i , j] = ( bmp1.Pixels[ i , j ] + bmp2.Pixels[ i , j ] + bmp3.Pixels[ i , j ]) /3
سلام دوستان
کسی میدونه برای مات کردن یک تصوبر؛ ماتریس آن تصویر رو باید با چه ماتریسی کانوالو کنیم؟
در واقع باید ماتریسی باشه که میانگین گیری انجام بده.درسته؟
سلام
به کمک فیلترهای پایین گذر مثل میانگین گیری میتونید تصویر را مات کنید.
[عکس: convolution-blur.png]

[عکس: generic-taj-convmatrix-blur.jpg]


توضیحات بیشتر در:
سلام من کد زیر را نوشتم برای میانگین گیری از تصاویر
کد:
for f=289:Frames
   for k = 1 :3  
               sum(:,:,k) = sum(:,:,k) + a(:,:,k,f);  
   end  
   imframe(:,:,1)=imframe(:,:,1) + sum(:,:,1)./260;  
   imframe(:,:,2)=imframe(:,:,2) + sum(:,:,2)./260;  
   imframe(:,:,3)=imframe(:,:,3) + sum(:,:,3)./260;  
   sum(:,:,:) = 0;  
end
 ولی اگر من بجای 260 مثلا تعداد فریم هایم را قرار بدهم تصویر خروجی سیاه میشود علت چیست؟
تعداد فریم ها 1489 تا است
تصویر حاصل :
[عکس: untitled.jpg]

و این هم تصویر اخرین فریم است
[عکس: untitled1.html][عکس: untitled1.jpg]

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