انجمن سایت کلیدستان



سوال : رسم ماتریس سه بعدیزمان کنونی: ۱۳۹۵/۰۹/۱۹، ۰۲:۰۹ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: 4i469x
آخرین ارسال: 4i469x
پاسخ 18
بازدید 16106

رتبه موضوع:
  • 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سوال : رسم ماتریس سه بعدی

سوال : رسم ماتریس سه بعدی

#1
Music 
سلام ، فایلی که در پیوست الصاق شده ، فایل با پسوند mat. هست و برای ترسیم شکلی استفاده میشه که در تصویر زیر دیده میشه ، در داده های وارد شده در workspace ، ماتریس های سه بعدی وجود داره که باید این ماتریس ها ترسیم بشه که با توجه به شکل های زیر فکر میکنم از دستور plot density باید استفاده بشه ، لطفا کمک کنید میخوام از داده های موجود سه شکل زیر رو ترسیم کنم .البته باید قسمت داخل که به صورت دایره دیده میشه رو از تبدیل فوریه داده های ستونی این ماتریس استفاده کنم یعنی از دستور FFT ، ولی بلد نیستم کد بنویسم به طوری که اگر یک مکعب رو تصور کنیم ، و از بالا به مکعب نگاه کنیم محتوای مربع دیده شده مثل یک آپارتمان که از بالا بهش نگاه کنیم ، ستون هایی از عدد است ، باید تبدیل فوریه هر ستون محاسبه بشه و بعد رسم بشه که فکر کنم از دستور plot density باید استفاده بشه ، لطفا دوستان اطلاعاتی در این زمینه دارند کمک کنند ، مخصوصا ادمین محترم که در سوالات قبلی که در انجمن مطرح کردم ، زحمت زیادی کشیدند و ازشون تشکر میکنم. ممنون


   

فایل با پسوند mat. رو در سایت فورشیر آپلود کردم .
http://www.4shared.com/file/bmNmmHiE/3d_3c_synth.html
دوست دارم زندگی رو . . . 
پاسخ

سوال : رسم ماتریس سه بعدی

#2
من تونستم با دستور imagesc نمایش دو بعدی از این داده ها را رسم کنم همانطور که در شکل زیر میبینید ولی میخوام از دید بالا این داده ها را رسم کنم که در واقع داده هایی که میبینید حاصل برداشت سه بعدی داده های لرزه ای است یعنی دو خط عمود برهم تصور کنید که یکی از خط ها فرستنده موج و خط دیگر که عمود بر خط فرستنده موج است ، خط گیرنده ها می باشد و به این ترتیب یک نمای سه بعدی از زیرزمین به دست می آید .
از دستور زیر استفاده کردم :
کد:
imagesc(d_x_true(:,:,9))


   
دوست دارم زندگی رو . . . 
پاسخ

سوال : رسم ماتریس سه بعدی

#3
سلام .
برای به دست آوردن آن شکل ها ، باید برای بعد اول ماتریس یک عدد مشخص کنید . مثلا با کد متلب زیر :


کد:
d_x_true_size=size(d_x_true)
f=zeros(d_x_true_size(2),d_x_true_size(2));
for nn=1:d_x_true_size(2)
    for mm=1:d_x_true_size(2)
       f(nn,mm)=d_x_true(5,nn,mm);
    end
end
imagesc(f)


که من عدد 5 رو وارد کردم (برای مثال) . نتیجه این کد متلب ، به صورت شکل زیر هست :

   


خوب حالا فقط ممکنه که با این روش رسم ، برخی جزئیات خوب رسم نشه که باید برید و روش های مختلف رسم رو امتحان کنید و ببینید با کدوم دقیقا مثل اون تصاویر نمایش داده میشه .
روش های مختلف میتونه شامل ((استفاده از دستورات ترسیم دیگر)) ، ((تعریف بازه متفاوتی از رنگ های متناظر با اعداد)) و ... باشه . اینو دیگه باید تست کنید .
امیدوارم همین اطلاعات مد نظرتون بوده باشه .
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط 4i469x

سوال : رسم ماتریس سه بعدی

#4
Music 
ممنونم ، واقعا ممنون کمک بزرگی کردی ادمین جان ، چون زمان t بر اساس عمودی از سطح زمین به طرف پایین در درون زمین حساب میشه پس وقتی از بالا به ماتریس نگاه کنیم عمق ماتریس زمان t است که شما برای t=5 رسم کردید من t=44 کردم و رسم کردم تقریبا همونی شد که انتظار داشتم ، ضمن اینکه m  فایلی هست برای دستور رسم به نام pimage.m که کیفیت ترسیمش بهتر از imagesc است که در پیوست من آپلود کردم تا استفاده کنید و ضمنا عکس هم با imagesc و هم با pimage برای t=44 رو در پایین میبینید. بسیار بسیار ممنونم . البته عکس های پست اول دارای نویز در داده هستند که به صورت دستی توسط کاربر به ماتریس اضافه شده است ، برای اضافه کردن نویز فکر کنم در حلقه for که تعریف کردید باید یک rand(1) هم اضافه بشه اگر درست نمیگم تصحیح بفرمایید. ممنون ضمنا اضافه کنم برای استفاده از دستور pimage باید در پرانتز سه جمله وارد کنید : جمله اول مختصات محور x ، جمله دوم مختصات محور عمودی ، جمله سوم ماتریس داده . اگر در پست دوم دقت کنید من نمای دئ بعدی از پهلوی ماتریس سه بعدی رو رسم کردم که اگر در محور عمودی که زمان هست t=44 رو نشون کنید و از بالا تصور کنید همون شکلی میشه که در پایین میبینید.
 :::::::imagesc:::::
   
::::::::pimage
   


فایل‌های پیوست

دانلود pimage.zip

نام فایل pimage.zip
نوع فایل .zip
دفعات دانلود 308
اندازه 879 بایت
ارسال کننده فایل 4i469x
دوست دارم زندگی رو . . . 
پاسخ
 سپاس شده توسط admin

سوال : رسم ماتریس سه بعدی

#5
بله واقعا شکل رسم شده توسط pimage.m کیفیت بهتری داره ، از مقایسه دو شکل ، کاملا مشخصه . ممنون .
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

#6
حالا میخوام بعضی از محورهای زمانی رو حذف کنم از بالا تا پایین ، منظورم اینه که از نمای بالا که در پست قبل دیده میشه ستون هایی رو حذف کنم ، تا با الگوریتمی که نوشتم آنها رو بازسازی کنم ، میشه کمک کنید . در ضمن من اگر بخوام تبدیل فوریه بگیرم از دستور fft استفاده میکنم و باید از ستون هایی که حذف نشده اندتبدیل فوریه بگیرم ، fft به صورت ستونی عمل میکنه و وقتی بر ماتریسی دو بعدی وارد بشه مثلا time-distance ، خروجی fft میشه :  frequency-distance.  حالا من میخوام کل ماتریس سه بعدی با ستون های دلخواه حذف شده رو تبدیل فوریه بگیرم فعلا از یک بعد یعنی زمان یعنی از دید بالا نگاه کنیم بر تمام ستون های عمودی fft وارد میشه. لطفا درباره فراخوانی صفحات ماتریس در یک ماتریس سه بعدی برام توضیح بدید . من اگر بخوام از دید بالا صفحات رو فراخوانی کنم یا از دید بغل باید چکار کنم . یعنی از دید بالا distance-distance و از دید بغل time-distance رو دارم . در مرحله اول میخوام از دید بغل از ماتریس ها ی که به صورت صفحاتی پشت سر هم هستند fft بگیرم و در مرحله دوم از ماتریس ها از دید بالا که به صورت صفحاتی پشت سر هم هستند fft2 بگیرم . که به این مثل اینه که یک تبدیل فوریه سه بعدی بر ماتریس سه بعدی وارد کردم. لطفا کمکم کنید . ممنون.
دوست دارم زندگی رو . . . 
پاسخ

سوال : رسم ماتریس سه بعدی

#7
برای حذف ستون ها ، فکر می کنم همون بحثی که قبلا مطرح شده بود بهتون کمک کنه :

http://www.kelidestan.com/forum/showthread.php?tid=3766

و فقط باید حواستون باشه که در جهت مناسب ، ستون ها رو حذف کنید .
در کل شما یک distance-distance دارید که به صورت زیر مشخص میشه :


کد:
d_x_true(time,:,:)

که time زمان مورد نظر هست .
و دو تا هم time-distance دارید که به دو صورت زیر مشخص می شوند :


کد:
d_x_true(:,:,y)
d_x_true(:,x,:)

که هر کدام برای یک x یا y مشخص می توانند رسم شوند .
برای fft ، ابتدا بر روی یک ماتریس کوچک تست کنید تا متوجه بشوید که fft در چه جهتی گرفته می شود تا برنامه را درست بنویسید . برای ماتریس های چند بعدی ، می توانید در یک حلقه for ، هر بار یک قسمت از ماتریس که مناسب برای دادن به ورودی دستور fft است را به دستور fft بدهید و خروجی را ذخیره کنید .

 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

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

سوال : رسم ماتریس سه بعدی

#9
سلام .
فرض کنید 30 تا ستون دارید که قصد دارید 20 تا از اون ها رو حذف کنید . روش حذف رو که قبلا در موردش صحبت کردیم ، میمونه شماره ستون هایی که باید حذف بشن . خوب بنابراین ما باید یک بردار بسازیم که در آن شماره ستون هایی که باید حذف شوند قرار داشته باشد و هیچ دو عنصر این بردار هم نباید برابر باشند . این بردار باید دارای 20 عدد مختلف باشه .
برای تولید این بردار ، کدهای زیر رو می نویسیم : 



کد:
clear all
close all
clc

total=30;
delete=20;

A=1:total;
for nn=1:total-delete
    a=1;
    b=total+1-nn;
    random_number=round(a+(b-a)*rand(1));
    A(random_number)=[];
end
A

نتیجه اجرای کد متلب بالا ، به صورت زیر می باشد :



کد:
A =

  Columns 1 through 15

     1     2     3     6     7     9    10    12    13    14    16    17    20    22    23

  Columns 16 through 20

    25    26    27    28    30

بنابراین شما باید بر اساس این 20 عدد ، 20 ستون رو حذف کنید (یا برابر صفر قرار دهید) .
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط bubrenula

سوال : رسم ماتریس سه بعدی

#10
سلام 
من از تابع randi  استفاده کردم ، در کدی که شما نوشتید پس از چند بار تکرار کردن متوجه شدم کد ناقصه و خروجی اونی نمیشه که هدفمون است  (اگر در خروجی عبارت numel(A)-nnz(A) رو محاسبه کنیم همیشه یک عدد نیست و تعداد درایه های ماتریس خروجی که صفر میشن متغیره )، کد من به شکل زیره :  
کد:
​ % Eliminate Random Traces 
  delete=2000;
 random_x= randi([1,121],1,delete);
 random_y=randi([1,121],1,delete);
 one=ones(delete,delete);
  for i=1:delete
    m(:,random_x(i),random_y(i))=0;
    one(random_x(i),random_y(i))=0;
  end

 ولی باز هم همون مشکل بالا وجود داره ، من باید برای تایید خوبی الگوریتمم ، درصد حذف اطلاعات رو دقیقا مشخص کنم و مثلا به ترتیب برای 10 درصد ، 20 درصد و .... 90درصد حذف اطلاعات یک سری محاسبات انجام بدم . در کد بالا تریس ها از بالا تا پایین حذف میشه ولی من میخوام از همون اول مشخص کنم مثلا 20 درصد تریس ها رو حذف کن که با توجه به اینکه 120*120 تریس داریم بنابراین میشه :  (120*120)*20/100 که تعداد تریس های صفر شده هست . میتونم به جای delete قرار بدم :  (120*120)*20/100  ، ولی مشکلی که هست اینه که ماتریس های random_x و random_y ساخته میشه شاید وقتی مختصات نقاط تریس ها رو انتخاب میکنیم دارای یک مختصات بشن مثلا (2,3) دو بار تکرار بشه ، احتمالش خیلی کمه ولی ممکنه . در این مورد راه حلی دارید ؟ ماتریس one برای بعدا هست که میتونم از روی تریس هایی که حذف شدند رو مشخص کنم.
دوست دارم زندگی رو . . . 
پاسخ
 سپاس شده توسط zzccflpkup

سوال : رسم ماتریس سه بعدی

#11
کدی که من در ارسال قبلی نوشتم ، صد در صد جواب میده . شما روی یک ماتریس کوچک چک کنید .
نحوه چک کردن شما دارای ایراد است :
کد:
numel(A)-nnz(A)

خوب ، numel که تعداد کل عناصر ماتریس رو میده و nnz هم تعداد عناصری رو میده که غیر صفر هستن . اما شما به فکر این نبودین که ممکنه تعدادی از عناصر قبلا دارای مقدار صفر باشن که باعث میشه عدد حاصل از دستور بالا با تعداد عناصری که خودتان صفر کرده اید ، متفاوت باشد .
هر کدی که می نویسید ابتدا روی ماتریس های کوچک چک کنید که بعدا در وسط برنامه نویسی ، به درست بودن برنامه شک نکنید . 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

#12
یه چیزی فهمیدم که برای داده دو بعدی ام خیلی به درد میخوره :::: دستور randperm  به مثال زیر توجه کنید :
کد:
clc
a=randperm(10)
a=
  1 10 5 2 4 8 3 7 9 6 
p = randperm(n) returnsa row vector containing a random permutation of the integers from1 to n inclusive.
p = randperm(n,k) returns a row vectorcontaining k unique integers selected randomlyfrom 1 to n inclusive.
ولی برای حذف  درایه های یک ماتریس دو بعدی با تعیین درصد حذف شدگی باید چکار کنم؟ منظورم اینه که با دستور randomperm میتونیم با توجه به درصد حذف شدگی ، عدد حذف شدن رو به دست بیاریم و ستون های یک ماتریس دو بعدی رو حذف کنیم ولی مسئله اینه میخوایم به یک عکس نگاه کنیم که هر مدلی از یک ماتریس دو بعدی است و بعد مثلا 30 درصد درایه های ماتریس را حذف کنیم یا به عبارت دیگر 30 درصد از عکس رو حذف کنیم مثل این میمونه که شما عکس رو به قطعات پازلی تقسیم کنید و بخواید 30 درصد از قطعات رو حذف کنید و بعد پازل رو حل کنید .
دوست دارم زندگی رو . . . 
پاسخ

سوال : رسم ماتریس سه بعدی

#13
سلام .
یک موضوع جدید با عنوان ((صفر کردن درصدی از عناصر یک ماتریس دو بعدی به صورت تصادفی)) بسازید و سوالتون رو همونجا بپرسید .
قصد داریم انجمن به گونه ای باشه که اگه سوالی پاسخ داده شد بعدا به راحتی بشه پیداش کرد ولی پرسیدن تعدادی سوال در یک موضوع زیاد جالب نیست . 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

#14
(۱۳۹۲/۰۲/۱۰, ۰۳:۵۳ ق.ظ)'admin' نوشته: کدی که من در ارسال قبلی نوشتم ، صد در صد جواب میده . شما روی یک ماتریس کوچک چک کنید .
نحوه چک کردن شما دارای ایراد است :

کد:
numel(A)-nnz(A)

خوب ، numel که تعداد کل عناصر ماتریس رو میده و nnz هم تعداد عناصری رو میده که غیر صفر هستن . اما شما به فکر این نبودین که ممکنه تعدادی از عناصر قبلا دارای مقدار صفر باشن که باعث میشه عدد حاصل از دستور بالا با تعداد عناصری که خودتان صفر کرده اید ، متفاوت باشد .
هر کدی که می نویسید ابتدا روی ماتریس های کوچک چک کنید که بعدا در وسط برنامه نویسی ، به درست بودن برنامه شک نکنید . 


 
در صورتی که در کدی که نوشتید به جای [] مقدار صفر رو قرار بدبد و ماتریس خروجی رو چک کنید متوجه منظور من میشید تعداد درایه هایی که صفر میشه در هر بار اجرا متغیره و نمیشه به نتیجه اتکا کرد . مثلا من میخواهم در یک ماتریس برداری 20 درصد از 40 عدد ستون رو صفر کنم ، بنابراین تعداد ستون هایی که باید صفر بشه میشه 8 ستون ، و در کدی که شما نوشتید اگر delete=8 قرار بدیم و برنامه رو 3 تا 4 بار اجرا کنید متوجه میشید که یکبار 8 تا ، یکبار 5 تا و .... صفر میکنه .
دوست دارم زندگی رو . . . 
پاسخ

سوال : رسم ماتریس سه بعدی

#15
این طور که متوجه شدم شما برنامه رو روی یک بردار چندین بار اجرا کردید ، خوب بنابراین وقتی یک عنصر بار اول صفر شده دوباره ممکنه انتخاب بشه و صفر بشه و چون شما میبینید صفر جدیدی اضافه نشده میگید که برنامه به تعداد تعیین شده صفر قرار نمیده .
برنامه رو تنها یک بار روی بردار اجرا کنید ، نه چندین بار . 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

#16
(۱۳۹۲/۰۲/۱۰, ۱۲:۲۱ ب.ظ)'admin' نوشته: سلام .
یک موضوع جدید با عنوان ((صفر کردن درصدی از عناصر یک ماتریس دو بعدی به صورت تصادفی)) بسازید و سوالتون رو همونجا بپرسید .
قصد داریم انجمن به گونه ای باشه که اگه سوالی پاسخ داده شد بعدا به راحتی بشه پیداش کرد ولی پرسیدن تعدادی سوال در یک موضوع زیاد جالب نیست . 


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

سوال : رسم ماتریس سه بعدی

#17
برنامه رو بخش بخش کنید و سپس سوال مربوط به هر بخش رو در یک موضوع جدید بپرسید .
 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

سوال : رسم ماتریس سه بعدی

#18
سلام ، ببخشید من فکر میکنم تو فراخوانی بعدهای ماتریس سه بعدی مشکل دارم ، کد الگوریتم بازسازی یک سیگنال سه بعدی رو نوشتم ، همانطور که در شکل زیر میبینید شکل اول از سمت چپ داده اصلی من است ( همان ماتریس سه بعدی d_x_true که تا 30 درایه از هر بعد رو بریدم و به عنوان داده ورودی کوچکتر برای تست الگوریتم به کار بردم) شکل دوم از سمت چپ به همه داده ها دامنه رندوم به عنوان نویز اضافه کردم و شکل سوم مقدار 20 درصد از ستون های ماتریس رو حذف کردم ( منظورم ستون هایی است که به سمت داخل صفحه نمایش هستند از این نما که شکل ها دیده میشود ) و شکل چهارم بازسازی با الگوریتم است.  ولی همانطور که میبینید شکل خروجی با شکل ورودی مطابقت ندارد و فکر میکنم در بازخوانی ابعاد مشکل وجود دارد . کدهایی که برای تبدیل فوریه نوشتم می نویسم و همین طور در شکلی که در زیر میبینید نمایی از ماتریس سه بعدی است که با این تصور من اقدام به کدنویسی کردم. نمیدونم این دید درست است ؟ و تصوری از اینکه یک ماتریس سه بعدی به چه صورت در متلب ذخیره میشود ندارم مثلا یک ماتریس 30*20*10 به چه شکل در متلب ذخیره میشود و چه بعدی x , چه بعدی y و چه بعدی z  محسوب میشود. در کاری که انجام میدهم برای همین ماتریس با ابعاد ذکر شده من بعد زمان یا محور عمودی به طرف داخل زمین رو 10 و بعد 20 رو به خطی که بر روی سطح زمین به صورت یک خط دیده میشود و بعد سوم 30 رو به بعدی که عمود بر شکل به طرف داخل صفحه است تصور میکنم . کدهایی که برای تبدیل فوریه نوشتم رو هم در زیر آورده ام . لطفا منو راهنمایی کنید. پیشاپیش از وقتی که برای پاسخگویی میگذارید کمال تشکر را دارم.


   

   

   



کد:
[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


 
دوست دارم زندگی رو . . . 
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)