سلام ، ببخشید من فکر میکنم تو فراخوانی بعدهای ماتریس سه بعدی مشکل دارم ، کد الگوریتم بازسازی یک سیگنال سه بعدی رو نوشتم ، همانطور که در شکل زیر میبینید شکل اول از سمت چپ داده اصلی من است ( همان ماتریس سه بعدی d_x_true که تا 30 درایه از هر بعد رو بریدم و به عنوان داده ورودی کوچکتر برای تست الگوریتم به کار بردم) شکل دوم از سمت چپ به همه داده ها دامنه رندوم به عنوان نویز اضافه کردم و شکل سوم مقدار 20 درصد از ستون های ماتریس رو حذف کردم ( منظورم ستون هایی است که به سمت داخل صفحه نمایش هستند از این نما که شکل ها دیده میشود ) و شکل چهارم بازسازی با الگوریتم است. ولی همانطور که میبینید شکل خروجی با شکل ورودی مطابقت ندارد و فکر میکنم در بازخوانی ابعاد مشکل وجود دارد . کدهایی که برای تبدیل فوریه نوشتم می نویسم و همین طور در شکلی که در زیر میبینید نمایی از ماتریس سه بعدی است که با این تصور من اقدام به کدنویسی کردم. نمیدونم این دید درست است ؟ و تصوری از اینکه یک ماتریس سه بعدی به چه صورت در متلب ذخیره میشود ندارم مثلا یک ماتریس 30*20*10 به چه شکل در متلب ذخیره میشود و چه بعدی x , چه بعدی y و چه بعدی z محسوب میشود. در کاری که انجام میدهم برای همین ماتریس با ابعاد ذکر شده من بعد زمان یا محور عمودی به طرف داخل زمین رو 10 و بعد 20 رو به خطی که بر روی سطح زمین به صورت یک خط دیده میشود و بعد سوم 30 رو به بعدی که عمود بر شکل به طرف داخل صفحه است تصور میکنم . کدهایی که برای تبدیل فوریه نوشتم رو هم در زیر آورده ام . لطفا منو راهنمایی کنید. پیشاپیش از وقتی که برای پاسخگویی میگذارید کمال تشکر را دارم.
توجه : در شکل خروجی الگوریتم ، هر 4 شکل با دستور imagesc رسم شده ولی شکل آخر سمت راست ، چون دستور imagesc اعداد مختلط رو نمیتونه بخونه ، abs داده خروجی رو رسم کردم.
برای حذف ستونهای رندوم از کذ زیر استفاده کردم ( مقداری کد شما رو تغییر دادم ) ماتریس mask برای این اضافه شده تا بعدا متوجه بشم چه ستون هایی حذف شده است.
کد:
[color=#FFA07A]% 1D Fourier Transform %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[/color]
[color=#008000]m_fft=zeros(m_size(1),m_size(2),m_size(3));
for iy=1:m_size(2) %1 to 121
m_fft(:,:,iy)=fft(m(:,:,iy)); [/color]
[color=#FF8C00]% (it ix iy ) 121 ta matrix 76 dar 121 >> Domain Output = ( f , x , y )[/color]
[color=#008000] end
[/color]
[color=#FFA07A]% 3D Fourier Transform %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[/color]
[color=#008000]m_fft3=zeros(m_size(1),m_size(2),m_size(3));
for it=1:m_size(1) %1 to 76
m_fft3(it,:,:)=fft2(m_fft(it,:,:)); [/color]
[color=#FFA07A]% (it ix iy ) 121 ta matrix 76 dar 121 >> Domain Output = ( f , kx , ky )[/color]
[color=#008000] end[/color]
توجه : در شکل خروجی الگوریتم ، هر 4 شکل با دستور imagesc رسم شده ولی شکل آخر سمت راست ، چون دستور imagesc اعداد مختلط رو نمیتونه بخونه ، abs داده خروجی رو رسم کردم.
برای حذف ستونهای رندوم از کذ زیر استفاده کردم ( مقداری کد شما رو تغییر دادم ) ماتریس mask برای این اضافه شده تا بعدا متوجه بشم چه ستون هایی حذف شده است.
کد:
% Eliminate Random Traces
percent=40;
number_delete_trace=floor(percent*(m_size(2)*m_size(3))/100);
mask=ones(m_size(2),m_size(3));
check_random_numbers=zeros(1,2);
number_delete=0;
while (number_delete~=number_delete_trace)
x_random=randi([1,m_size(2)],1,1);
y_random=randi([1,m_size(3)],1,1);
p=0;
for i=1:number_delete
if ([x_random,y_random]==check_random_numbers(i,:))
p=1;
end
end
if (p==0)
m_noise(:,x_random,y_random)=0;
mask(x_random,y_random)=0;
number_delete=number_delete+1;
check_random_numbers(number_delete,:)=[x_random,y_random];
end
end
دوست دارم زندگی رو . . .