رفتن به مطلب

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


farivar.maryam

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

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

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

 

جواب باید یکی باشه. توی اون حالت هم ماسک 3 در 3 استفاده میکنی؟

کد؟

لینک به دیدگاه
جواب باید یکی باشه. توی اون حالت هم ماسک 3 در 3 استفاده میکنی؟ کد؟
من تو اون حالت از این دستورها استفاده کردم همشون هم تقزیبا عین هم کار میکننd=filter2(fspecial('average',3),c)/255d=medfilt2(c,[10 10])d=wiener2(c,[8 8]) البته این 8 و 10 رو تخمینی زدم من اما این دستوراتی که الان نوشیتم اصلا یه جور دیگه کار میکنه کد جدیدم بطور کامل اینهclccleara=imread('1.jpg');figure;imshow(a)b=100*rand(size(a));figure;b=uint8(b);plot(b)c=a+b;figure;imshow©w=1/3*2*ones(3);[m,n]=size©;d=uint8(zeros(size©))for x=2:m-1 for y=2:n-1 d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+... w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+... w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+... w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1)); endend figure; imshow(d)
لینک به دیدگاه
من تو اون حالت از این دستورها استفاده کردم همشون هم تقزیبا عین هم کار میکنن

d=filter2(fspecial('average',3),c)/255d=medfilt2(c,[10 10])d=wiener2(c,[8 8]) البته این 8 و 10 رو تخمینی زدم من اما این دستوراتی که الان نوشیتم اصلا یه جور دیگه کار میکنه کد جدیدم بطور کامل اینهclccleara=imread('1.jpg');figure;imshow(a)b=100*rand(size(a));figure;b=uint8(b);plot(b)c=a+b;figure;imshow(c)w=1/3*2*ones(3)

;[m,n]=size©;d=uint8(zeros(size©))for x=2:m-1 for y=2:n-1 d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+... w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+... w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+... w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1)); endend figure; imshow(d)

[/code]d=filter2(fspecial('average',3),c)/255d=medfilt2(c,[10 10])d=wiener2(c,[8 8]) البته این 8 و 10 رو تخمینی زدم من اما این دستوراتی که الان نوشیتم اصلا یه جور دیگه کار میکنه کد جدیدم بطور کامل اینهclccleara=imread('1.jpg');figure;imshow(a)b=100*rand(size(a));figure;b=uint8(b);plot(b)c=a+b;figure;imshow©w=1/3*2*ones(3)


;[m,n]=size©;d=uint8(zeros(size©))for x=2:m-1 for y=2:n-1 d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+... w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+... w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+... w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1)); endend figure; imshow(d)

لینک به دیدگاه
[/code]d=filter2(fspecial('average',3),c)/255d=medfilt2(c,[10 10])d=wiener2(c,[8 8]) البته این 8 و 10 رو تخمینی زدم من اما این دستوراتی که الان نوشیتم اصلا یه جور دیگه کار میکنه کد جدیدم بطور کامل اینهclccleara=imread('1.jpg');figure;imshow(a)b=100*rand(size(a));figure;b=uint8(b);plot(b)c=a+b;figure;imshow©w=1/3*2*ones(3);[m,n]=size©;d=uint8(zeros(size©))for x=2:m-1 for y=2:n-1 d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+... w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+... w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+... w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1)); endend figure; imshow(d)

 

دو تا پست رو Edit میکنی، قابل خوندن نیست، برای نمایش کد میتونی از گزینه ی # (شارپ) استفاده کنی.

لینک به دیدگاه
دو تا پست رو Edit میکنی، قابل خوندن نیست، برای نمایش کد میتونی از گزینه ی # (شارپ) استفاده کنی.

قبلا این جوری نوشته بودم دستورا رو

a=imread('1.jpg');figure;
imshow(a)
b=100*rand(size(a));
figure;
b=uint8(b);
plot(b)
c=a+b;
figure;
imshow(c)
d=filter2(fspecial('average',3),c)/255;
figure;
imshow(d)

لینک به دیدگاه
قبلا این جوری نوشته بودم دستورا رو

a=imread('1.jpg');figure;
imshow(a)
b=100*rand(size(a));
figure;
b=uint8(b);
plot(b)
c=a+b;
figure;
imshow(c)
d=filter2(fspecial('average',3),c)/255;
figure;
imshow(d)

کد جدیدی که امشب به کمک شما نوشتم اینه

clcclear
a=imread('1.jpg');
figure;
imshow(a)
b=100*rand(size(a));
figure;
b=uint8(b);
plot(b)
c=a+b;
figure;
imshow(c)
w=1/3*2*ones(3);
[m,n]=size(c);
d=uint8(zeros(size(c)))
for x=2:m-1
   for y=2:n-1
       d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+...
       w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+...
       w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+...
       w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1));
   end
end
       figure;
       imshow(d)

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

clcclear
a=imread('1.jpg');
figure;
imshow(a)
b=100*rand(size(a));
figure;
b=uint8(b);
plot(b)
c=a+b;
figure;
imshow(c)
w=1/3*2*ones(3);
[m,n]=size(c);
d=uint8(zeros(size(c)))
for x=2:m-1
   for y=2:n-1
       d(x,y)= (w(3,3)*c(x-1,y-1)+w(3,2)*c(x-1,y)+...
       w(3,1)*c(x-1,y+1)+w(2,3)*c(x,y-1)+...
       w(2,2)*c(x,y)+w(2,1)*c(x,y+1)+...
       w(1,3)*c(x+1,y-1)+w(1,2)*c(x+1,y)+w(1,1)*c(x+1,y+1));
   end
end
       figure;
       imshow(d)

 

تصویر سفید میشه، یعنی مقادیر بزرگ تر از 1 (اگه 8 بیتی بگیریم مساوی 255) شدن.

قرار شد بر تعداد تقسیم کنی، تعداد که 6 تا نیست.

لینک به دیدگاه
تصویر سفید میشه، یعنی مقادیر بزرگ تر از 1 (اگه 8 بیتی بگیریم مساوی 255) شدن.

قرار شد بر تعداد تقسیم کنی، تعداد که 6 تا نیست.

اون 6 رو درستش کردن اشتباه تایپی بود به 3 تقسیم کردم

خوب اینکه سفید یعنی 255 رو میدونم اما تو تصویر این یعنی جی؟ برا چی با این دستورات سفید میشه؟ باید چکارش کرد تا این مشکل حل شه؟؟؟؟؟

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

خوب اگه اینجوری باشه که داره بخش های تصویر رو پاک میکنه نه که نویز تصویر رو از بین ببره

لینک به دیدگاه
اون 6 رو درستش کردن اشتباه تایپی بود به 3 تقسیم کردم

خوب اینکه سفید یعنی 255 رو میدونم اما تو تصویر این یعنی جی؟ برا چی با این دستورات سفید میشه؟ باید چکارش کرد تا این مشکل حل شه؟؟؟؟؟

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

خوب اگه اینجوری باشه که داره بخش های تصویر رو پاک میکنه نه که نویز تصویر رو از بین ببره

 

نه، ***** میانگین مجموعی برابر یک داره، یعنی اگه تمام مقادیری که داخل Mask قرار میگیرن برابر 255 باشه، در اون حالت خروجی برابر 255 میشه. ولی اینجا برای کل تصویر خروجی 255 داری، هنوز هم تقسیم درست نیست.

لینک به دیدگاه
نه، ***** میانگین مجموعی برابر یک داره، یعنی اگه تمام مقادیری که داخل Mask قرار میگیرن برابر 255 باشه، در اون حالت خروجی برابر 255 میشه. ولی اینجا برای کل تصویر خروجی 255 داری، هنوز هم تقسیم درست نیست.

فرمولی که داده بودین این بود

1/2*2*omes(n)

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

لینک به دیدگاه
فرمولی که داده بودین این بود

1/2*2*omes(n)

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

 

خسته که نشدم.

فکر نکنم اینجوری نوشته باشم.

مگه ماتریست 9 تا درایه نداره، پس چرا تقسیم بر 6 یا 3. توی فرمول بالا هم باید توان باشه، نه ضرب.

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

فکر نکنم اینجوری نوشته باشم.

مگه ماتریست 9 تا درایه نداره، پس چرا تقسیم بر 6 یا 3. توی فرمول بالا هم باید توان باشه، نه ضرب.

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

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

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

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

 

نه دقیقا مثل همدیگه هستن، واسه چی میگی فرق میکنه؟

لینک به دیدگاه
نه دقیقا مثل همدیگه هستن، واسه چی میگی فرق میکنه؟

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

واقعا ازت ممنونم خیلی چیزا یاد گرفتم یعنی در اصل همشو از شما یاد گرفتم ممنونم

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

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

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

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

 

ببخش دیر شد

فرصت نکردم

 

negin1 = imread('negin.jpg');

f=double(negin1);

[n m]=size(f);

fn=zeros(n,m);

for x=1:n

y=1;fk(x,y)=f(x,y);

y=m;fk(x,y)=f(x,y);

end

for y=1:m

x=1;fk(x,y)=f(x,y);

x=n;fk(x,y)=f(x,y);

end

for x=2:n-1

for y=2:m-1

fk(x,y)=(f(x,y)+f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1)+f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1))/9.0;

 

end

end

imshow(uint8(negin1),'notruesize');

imshow(uint8(fn),'notruesize');

لینک به دیدگاه
ببخش دیر شد

فرصت نکردم

 

negin1 = imread('negin.jpg');

f=double(negin1);

[n m]=size(f);

fn=zeros(n,m);

for x=1:n

y=1;fk(x,y)=f(x,y);

y=m;fk(x,y)=f(x,y);

end

for y=1:m

x=1;fk(x,y)=f(x,y);

x=n;fk(x,y)=f(x,y);

end

for x=2:n-1

for y=2:m-1

fk(x,y)=(f(x,y)+f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1)+f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1))/9.0;

 

end

end

imshow(uint8(negin1),'notruesize');

imshow(uint8(fn),'notruesize');

 

سلام

 

دو تا حلقه اول رو میتونین حذف کنین:

 

fk(1:n,1)=f(1:n,1);
fk(1:n,m)=f(1:n,m);

fk(1,1:m)=f(1,1:m);
fk(n,1:m)=f(n,1:m);

 

'notruesize' مثل اینکه توی ورژن های جدید حذف شده، به جاش اینجوری میشه نوشت:

 

imshow(uint8(fn),'InitialMagnification','fit');

لینک به دیدگاه
ببخش دیر شد

فرصت نکردم

 

negin1 = imread('negin.jpg');

f=double(negin1);

[n m]=size(f);

fn=zeros(n,m);

for x=1:n

y=1;fk(x,y)=f(x,y);

y=m;fk(x,y)=f(x,y);

end

for y=1:m

x=1;fk(x,y)=f(x,y);

x=n;fk(x,y)=f(x,y);

end

for x=2:n-1

for y=2:m-1

fk(x,y)=(f(x,y)+f(x-1,y)+f(x+1,y)+f(x,y-1)+f(x,y+1)+f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1))/9.0;

 

end

end

imshow(uint8(negin1),'notruesize');

imshow(uint8(fn),'notruesize');

سلام عزیزم واقعا ازت ممنونم

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

سلام

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

تصویر هم به اندازه Mask بزرگ کردم (Padding)، تا Mask بتونه روی کل تصویر حرکت کنه. برای پیکسل های اضافه شده هم همون مقدار حاشیه تصویر گذاشتم. اگه از تابع padarray بخوایم برای این کار استفاده کنیم، این حالت که من نوشتم میشه 'replicate'.

 

clear
img = imread('moon.tif');
figure;
subplot(121)
imshow(img)
title('Original Image','FontSize',14)
% Mask
Mask = ones(1,33);
Mask = Mask ./ sum(Mask(:));

[m,n] = size(img);
[r,s] = size(Mask);
if mod(r,2) ==0 || mod(s,2) ==0
   error('Mask size should to be odd in both dimensions')
end
% Rotating Mask for convolution
Mask = Mask(end:-1:1,end:-1:1);
% Padding
Padding = img([ones(1,(r-1)/2) 1:end end*ones(1,(r-1)/2)],...
             [ones(1,(s-1)/2) 1:end end*ones(1,(s-1)/2)]);
Padding = im2double(Padding);
Output_img = zeros(size(img));
for i=1:m
   for j=1:n
       Output_img(i,j)= sum(sum(Mask.*Padding(i:i+r-1,j:j+s-1)));
   end
end
Output_img = im2uint8(Output_img);
subplot(122)
imshow(Output_img)
title('Output Image','FontSize',14)

 

چون اینجا ماسکمون یک در 33 هست، تصویرهم فقط در جهت افقی blur میشه.

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

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

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

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

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

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

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

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

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

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