رفتن به مطلب

درخواست کمک در زمینه moving average در متلب


farivar.maryam

ارسال های توصیه شده

با سلام

از دوستان عزیز خواهش میکنم اگر کسی در زمینه moving average در متلب فایل آموزشی یا مطلبی داره لطف کنه و در اختیارم بذاره

ممنونم از لطف همگی

لینک به دیدگاه
با سلام

از دوستان عزیز خواهش میکنم اگر کسی در زمینه moving average در متلب فایل آموزشی یا مطلبی داره لطف کنه و در اختیارم بذاره

ممنونم از لطف همگی

 

سلام

روی تصویر یا سیگنال؟

 

روی تصویر رو میگم، سیگنال یه بعدیش میشه.

 

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

 

conv2, filter2, imfilter

 

یا حتی دستور های Colfilt یا nlfilter

لینک به دیدگاه
سلام

روی تصویر یا سیگنال؟

روی تصویر رو میگم، سیگنال یه بعدیش میشه.

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

 

conv2, filter2, imfilter

 

یا حتی دستور های Colfilt یا nlfilter

سلام دستت درد نکنه من با filter2 انجام داده بودم اما راستشو بخوای نمیدونستم کدوم دستورها جز این moving average محسوب میشن

والا استاد ما تو صورت سوال گفته سیگنال اما مثال که زد رو تصویر زد من هم رو تصویر انجام دادم براش

یه سوال دیگه هم دارم البته ببخشید تصویر خودش نوعی سیگنال به حساب میاد؟

لینک به دیدگاه
سلام دستت درد نکنه من با filter2 انجام داده بودم اما راستشو بخوای نمیدونستم کدوم دستورها جز این moving average محسوب میشن

والا استاد ما تو صورت سوال گفته سیگنال اما مثال که زد رو تصویر زد من هم رو تصویر انجام دادم براش

یه سوال دیگه هم دارم البته ببخشید تصویر خودش نوعی سیگنال به حساب میاد؟

 

خواهش میکنم.

ببخشید واسه چی؟ سوال دیگه.

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

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

لینک به دیدگاه
خواهش میکنم.

ببخشید واسه چی؟ سوال دیگه.

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

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

سلام ممنون از راهنماییات

یه کمک دیگه هم میخواستم ازتون

من یه تصویر سیاه و سفید رو با یه سیگنال رندوم جمع کردم به عبارتی از سیگنال رندوم به عنوان نویز استفاده کردم استادمون میگه تا اینجای کارم درسته اما نباید از فییلترهای آماده استفاده کنم و moving average رو باید با استفاده از کدنویسی در متلب بسازم

در این زمینه شما میتونی بهم کمک کنی؟

برام خیلی مهمه ممنون میشم

لینک به دیدگاه
سلام ممنون از راهنماییات

یه کمک دیگه هم میخواستم ازتون

من یه تصویر سیاه و سفید رو با یه سیگنال رندوم جمع کردم به عبارتی از سیگنال رندوم به عنوان نویز استفاده کردم استادمون میگه تا اینجای کارم درسته اما نباید از فییلترهای آماده استفاده کنم و moving average رو باید با استفاده از کدنویسی در متلب بسازم

در این زمینه شما میتونی بهم کمک کنی؟

برام خیلی مهمه ممنون میشم

 

سلام

کدی که نوشتی رو بذار.

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

لینک به دیدگاه
سلام

کدی که نوشتی رو بذار.

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

دست گلت درد نکنه

من این کد رو نوشتم

a=imread('1.jpg');

figure;

imshow(a)

b=100*rand(size(a));

figure;

b=uint8(b);

plot(b)

c=a+b;

figure;

imshow©

d=filter2(fspecial('average',8),c)/255;

figure;

imshow(d)

استادمون میگه این درسته اما میگه هدف اصلی من از این سوال این بوده که با کد نویسی moving average رو بسازی نه که از فییلترهای آماده نرم افزار متلب استفاده کنی

حالا من اصلا نمیدونم برا این کار از کجا شروع کنم

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

من این کد رو نوشتم

a=imread('1.jpg');

figure;

imshow(a)

b=100*rand(size(a));

figure;

b=uint8(b);

plot(b)

c=a+b;

figure;

imshow©

d=filter2(fspecial('average',8),c)/255;

figure;

imshow(d)

استادمون میگه این درسته اما میگه هدف اصلی من از این سوال این بوده که با کد نویسی moving average رو بسازی نه که از فییلترهای آماده نرم افزار متلب استفاده کنی

حالا من اصلا نمیدونم برا این کار از کجا شروع کنم

 

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

لینک به دیدگاه
باید ماسک 3 در 3 کنی

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

این ماسک رو کل تصویرت اعمال میکنی

همین ..

سلام دوست من خیلی ممنونم از راهنماییت میشه بیشتر توضیح بدی؟

منظورتون اینه من یه ماسک 3*3 رو تصویر ایجاد کنم و ماسک د رتصویر کانوالو بشه بعد از دوباره تو یه بازه دیگه ماسک 3*3 ایجاد کنم باز کانوالو کنم همین طور تا کل تصویر پوشش داده بشه؟ و بعد همه اینا رو با هم جمع کنم؟

اون تقسیم بر 9 هم نفهمیدم برای چه کاریه

ممنون میشم اگه کامل تر برام بگی باید چکار کنم

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

من این کد رو نوشتم

a=imread('1.jpg');

figure;

imshow(a)

b=100*rand(size(a));

figure;

b=uint8(b);

plot(b)

c=a+b;

figure;

imshow©

d=filter2(fspecial('average',8),c)/255;

figure;

imshow(d)

استادمون میگه این درسته اما میگه هدف اصلی من از این سوال این بوده که با کد نویسی moving average رو بسازی نه که از فییلترهای آماده نرم افزار متلب استفاده کنی

حالا من اصلا نمیدونم برا این کار از کجا شروع کنم

 

سلام

اول درباره نویزی که اضافه کردی صحبت کنیم. b یه نویز با توزیع یکنواخت و میانگین 50 هست.

دوم اینکه ماسکی که استفاده کردی یعنی fspecial('average',8) میدونی چیه؟

 

n = 8;
1/n^2*ones(n)

 

یه ماسک با تمام مقادیر برابر و مجموع مساوی یک. توی این حالت این ماسک 8 در ،8 پیکسل به پیکسل روی تصویر حرکت میکنه و میانگین میگره.

 

سوم مفهوم کانولوشن دو بعدی هست که برای کدنویسی بهش احتیاج داری، انیمیشن براش پیدا نکردم، ولی فکر کنم همین عکس ها هم بد نباشه، Kernel هم همون ماسکی که دربارش صحبت کردیم:

 

kernel_convolution.jpg

 

 

img40.png

لینک به دیدگاه
سلام

اول درباره نویزی که اضافه کردی صحبت کنیم. b یه نویز با توزیع یکنواخت و میانگین 50 هست.

دوم اینکه ماسکی که استفاده کردی یعنی fspecial('average',8) میدونی چیه؟

 

n = 8;
1/n^2*ones(n)

 

یه ماسک با تمام مقادیر برابر و مجموع مساوی یک. توی این حالت این ماسک 8 در ،8 پیکسل به پیکسل روی تصویر حرکت میکنه و میانگین میگره.

 

سوم مفهوم کانولوشن دو بعدی هست که برای کدنویسی بهش احتیاج داری، انیمیشن براش پیدا نکردم، ولی فکر کنم همین عکس ها هم بد نباشه، Kernel هم همون ماسکی که دربارش صحبت کردیم:

 

kernel_convolution.jpg

 

 

img40.png

دستت واقعا درد نکنه خیلی بهم کمک کردی

با عرض شرمندگی من بازم مشکل داشتم مزاحمتون میشم

لینک به دیدگاه
سلام دوست من خیلی ممنونم از راهنماییت میشه بیشتر توضیح بدی؟

منظورتون اینه من یه ماسک 3*3 رو تصویر ایجاد کنم و ماسک د رتصویر کانوالو بشه بعد از دوباره تو یه بازه دیگه ماسک 3*3 ایجاد کنم باز کانوالو کنم همین طور تا کل تصویر پوشش داده بشه؟ و بعد همه اینا رو با هم جمع کنم؟

اون تقسیم بر 9 هم نفهمیدم برای چه کاریه

ممنون میشم اگه کامل تر برام بگی باید چکار کنم

نگین جان راهنمایی هات خیلی بهم کمک کرد ازت ممنونم

لینک به دیدگاه
دستت واقعا درد نکنه خیلی بهم کمک کردی

با عرض شرمندگی من بازم مشکل داشتم مزاحمتون میشم

 

چه مزاحمتی، نویز همون چیزی بود که میخواستی اضافه کنی؟

لینک به دیدگاه
چه مزاحمتی، نویز همون چیزی بود که میخواستی اضافه کنی؟

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

figure;

imshow(a)

b=100*rand(size(a));

figure;

b=uint8(b);

plot(b)

c=a+b;

figure;

imshow©

w=[4 0 0

0 0 0

0 0 -4];

[m,n]=size©;

for x=1:m

for y=1:n

d(x,y)=w(x-1,y-1)*c(x-1,y-1)+w(x-1,y)*c(x-1,y)+

w(x-1,y+1)*c(x-1,y+1)+w(x,y)*c(x,y)+

w(x,y+1)*c(x,y+1)+w(x+1,y-1)*c(x+1,y-1)+

w(x+1,y)*c(x+1,y)+w(x+1,y+1)*c(x+1,y+1)

end

end

figure;

imshow(d)

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

figure;

imshow(a)

b=100*rand(size(a));

figure;

b=uint8(b);

plot(b)

c=a+b;

figure;

imshow©

w=[4 0 0

0 0 0

0 0 -4];

[m,n]=size©;

for x=1:m

for y=1:n

d(x,y)=w(x-1,y-1)*c(x-1,y-1)+w(x-1,y)*c(x-1,y)+

w(x-1,y+1)*c(x-1,y+1)+w(x,y)*c(x,y)+

w(x,y+1)*c(x,y+1)+w(x+1,y-1)*c(x+1,y-1)+

w(x+1,y)*c(x+1,y)+w(x+1,y+1)*c(x+1,y+1)

end

end

figure;

imshow(d)

 

یه خطی اگه طولانی شد، میشه توی چند خط آورد با ...:

 

d(x,y)=w(x-1,y-1)*c(x-1,y-1)+w(x-1,y)*c(x-1,y)+...
              w(x-1,y+1)*c(x-1,y+1)+w(x,y)*c(x,y)+...
              w(x,y+1)*c(x,y+1)+w(x+1,y-1)*c(x+1,y-1)+...
              w(x+1,y)*c(x+1,y)+w(x+1,y+1)*c(x+1,y+1);

 

اینجا روی تصویر پیکسل به پیکسل جلو میره، آدرس دهی c درسته. ولی ماسک یا همون w یه ماتریس 3 در 3 هست، آدرس دهی با x و y که مقادیرشون میتونه خیلی بزرگتر از سه باشه، درست نیست. یه چیزی دیگه ای که هست، توی کانولوشن ماسک به اندازه 180 چرخش داره (توی سیگنال هم برای کانولوشن اول سیگنال دوم رو نسبت به مبدا آینه میکنیم) یعنی برای جمله اول:

w(3,3)*c(x-1,y-1)

 

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

 

d = uint8(zeros(size(a)));

لینک به دیدگاه
یه خطی اگه طولانی شد، میشه توی چند خط آورد با ...:

 

d(x,y)=w(x-1,y-1)*c(x-1,y-1)+w(x-1,y)*c(x-1,y)+...
              w(x-1,y+1)*c(x-1,y+1)+w(x,y)*c(x,y)+...
              w(x,y+1)*c(x,y+1)+w(x+1,y-1)*c(x+1,y-1)+...
              w(x+1,y)*c(x+1,y)+w(x+1,y+1)*c(x+1,y+1);

 

اینجا روی تصویر پیکسل به پیکسل جلو میره، آدرس دهی c درسته. ولی ماسک یا همون w یه ماتریس 3 در 3 هست، آدرس دهی با x و y که مقادیرشون میتونه خیلی بزرگتر از سه باشه، درست نیست. یه چیزی دیگه ای که هست، توی کانولوشن ماسک به اندازه 180 چرخش داره (توی سیگنال هم برای کانولوشن اول سیگنال دوم رو نسبت به مبدا آینه میکنیم) یعنی برای جمله اول:

w(3,3)*c(x-1,y-1)

 

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

 

d = uint8(zeros(size(a)));

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

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

 

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

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

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

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

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

در مورد اون n هم روش کار میکنم خوشحال میشم از اطلاعاتتون استفاده کنم و ایشالا این لطفتون رو جبران کنم

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

در مورد اون n هم روش کار میکنم خوشحال میشم از اطلاعاتتون استفاده کنم و ایشالا این لطفتون رو جبران کنم

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

جایی از کار من اشتباهه؟ یا این که عملکرد خودش همینجوره؟

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...