اطلاعیه

Collapse
No announcement yet.

چرخش تصویر Real Time با کمک FPGA

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    چرخش تصویر Real Time با کمک FPGA



    چرخش تصویر Real Time با کمک FPGA

    چکیده: در این مقاله الگوریتم و چرخش تصویر Real Time با کیفیت و رزولیشن بالا تشریح می شود.

    الگوریتم به کار رفته بر مبنای درون یابی خطی (Bilinear) ، مقادیر پیکسلهای چرخش یافته را محاسبه و با توجه به آدرس جدید به خروجی ارسال می کند.مشکلی که در اینجا وجود دارد ، حجم سنگین عملیات پردازش ورودی است که باید توسط سیستم مزبوردر زمان بسیار اندکی (ms 15) اجرا شود.

    با FPGA در هر ثانه 30 تصویر پردازش می گردد. 8.2 گیگابیت اطلاعات از حافظه خوانده شده و توسط FPGA پرذازش می شوند.درهر ثانیه 700 مگابیت اطاعات نیز وارد و همزمان همین مقدار اطلاعات به خروجی ارسال می گردد.

    مقدمه:

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

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

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



    - تحلیل تصویر چرخش بلا درنگ

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

    آیا برای انتخاب مقادیر هر پبکسل در موقعیت جدید استفاده از اطلاعات پیکسل در نزدیکترین موقعیت کافی است؟ روش درون یابی Bilinear را به کار میبریم تا ناپیوستگی در لبه های تصویر را از بین ببریم و یا اینکه از روش Bicubic (تعیین مقدار پیکسل جید بر حسب وزن دادن به 16 عدد پیکسل مجاور پیکسل محاسبه شده) استفاده کنیم؟ انتخاب سطح کیفیت تصویر چرخش یافته ، پارامترهای FPGA و پهنای باند سیستم را به شدت تحت تاثیر قرار می دهد.



    ا1-2گوریتم چرخش تصویر بعد از ذخیره یک فریم اطلاعات از تصویر انجام می شود.

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

    Sx=DxCos(t)+Dysin(t)

    Sy=DyCos(t)+DxSin(t)

    زاویه چرخش، Sx آدرس افقی و Sy آدرس عمودی پیکسل در تصویر اولیه.DxوDy نیز به ترتیب ، مختصات افقی و عمودی پیکسل در تصویر چرخش یافته می باشند.

    2-2 . الگوریتم چرخش تصویر قبل از بافر قرار می گیرد.در این حالت ماتریس دوران به صورت زیر نوشته می شود:

    Dx=Sxcost-Sysint

    Dy=sycost+SxSint

    در اینجا مطابق با حالت قبل،آ‌ Dx,Dy مختصات پیکسل در تصویر چرخش یافته ،آ‌ SxوSy مختصات پیکسل در تصویر اولیه و t اویه چرخش می باشد.

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

    های جدید محاسبه شد، مقادیر اطلاعات پیکسل(Sx,Sy) در محل آدرس جدید (Dx,Dy) قرار داده می شوند.

    این روش از این لحاظ که باعث پهنای باند مورد نیاز برای حافظه می شوند،مقرون به صرفه تر است، چون اطلاعات تصویر ورودی به صورت غیر ترتیبی در بافر ذخیره می شود و نیاز به درون یابی وجود ندارد.این به این معنی است که اطلاعات ورودی به ترتیب از پیکسل 1 تا پیکسل n وارد سیستم پردازش می شوند. در اینجا Sx و Sy و مقدار پیکسل (می تواند بر حسب Y,U,V یا B,G,R باشد) به عنوان ورودی و Dx و Dyاز رابطه مربوطه بدست می آید.نزدیکترین موقعیت صحیح به نقطه (Dx,Dy) انتخاب شده و مقدار پیکسل (Sx,Sy) در آن موقعیت قرار داده می شود.حال ممکن است نقاطی در تصویر نهایی وجود داشته باشند که در هیچ موقعیتی جهت ریختن مقدار ، انتخاب نشده باسند.در این صورت در تصویر نهایی به جای این پیکسل ها نقاط سیاه رنگ مشاهده می شوند که ناشی از این مشکل است.

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

    فرض کنید X و Y به ترتیب بین (0,n) و (0,m) تغییر کنند، یعنی تصویر ما دارای mوn پیکسل باشد. حال اگر با ایجاد چرخش در تصویر، مقادیری که برای xوy بدست می آید، در محدوده فوق باشد قابل قبول ، و گرنه اطلاعات مربوطه دور ریخته میشود.این برای چهار گوشه تصویر اتفاق می افتد : مختصات yگوشه بالایی سمت چپ و گوشه پایینی سمت چپ.بعد از چرخش در رنج تصویر قرار نگرفته و اطلاعات آنها استفاده نمی شود، یعنی پیکسل های گوشه های تصویر چرخش یافته انتقال یافته، هیچکدام از نقاط تصویر اولیه نمی باشد.

    به منظور کنترل و رفع اشکالات این روش ، الگوریتم حاصل بسیار پیچیده می شود و به طور کامل نمی توان اشکالات آن را رفع کرد ، بنابراین در این کاربرد ما از روش اول استفاده می کنیم ، یعنی اجرای چرخش بعد از ذخیره یک فریم از تصویر مناسب تر است.در روش اول پهنای باند حافظه به کار برده شده باید 4 برابر (در روش درون یابی (Bilinearو 16 برابر گردد.انتخاب هر کدام از روش ها به مسائل طراحی و نوع حافظه ای که می توانیم استفاده کنیم ، بر می گردد.

    می توان به روش دیگر مشکل فوق را نیز حل کرد، به این ترتیب که تعداد مراجعات برای خواندن مقادیر پیکسل ها را کاهش داد. در روش درون یابی Bilinear باید 4 بار به حافظه مراجعه و هر بار اطلاعات یک پیکسل را در اختیار FPGA قرار دهیم. به جای این کار میتوان به جای هر بار مراجعه به حافظه ، 4 عدد پیکسل ردر کنار هم از حافظه خوامده و در پردازش و درون یابی از آنها استفاده نمود ، البته در این روش باید باس داده ها برای حافظه افزایش یابد، یعنی مثلا به جای باس داده 8 بیتی باید از باس داده 32 بیتی استفاده نمود.





    .درون یابی (Interpiolatiuon) :

    مقادیر که از رابطه 1 محاسبه میشوند ، معمولا به صورت عدد صحیح نمی باشند. ، یعنی اینکه نقطه دوران یافته بین چند پیکسل قرار میگیرد.در این حالت ، Sx و Sy یک مقدار صحیح و یک مقدار اعشاری دارند.

    قسمت اعشاری Sx و Sy به ترتیب Rx و Ry می باشد. فرض کنید پیکسل چرخش یافته بین پیکسل های XYو Xpy و Xyp و XpYp قرار گرفته باشد ، طبق درون یابی خطی مقادیر وزن های مربوطه به صورت زیر محاسبه می شوند.

    Weighting (XY) =Wxy= (1-Rx) (1-Ry)

    Weighting (XpY) =Wxpy= (1-Rx) (1-Ry)

    Weighting (XYp) =Wxyp= (1-Rx) (-Ry)

    Weighting (XpYp) = (Rx) (Ry)

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

    Wxy=(1-Rx)-wxyp

    Wxyp=(Rx)-wxpuyp

    Wxyp=(Ry)-wxpyp

    wxpyp=(RxRy)

    در روابط فوق، تنها یک عمل ضرب داریم و بقیه عمل ها به صورت جمع و تفریق می باشند. حال برای پیدا کردن مقدار پیکسل (Dx,Dy) مقادیر پیکسل های فوق را در وزن های مربوطه ضرب و با هم جمع می کنیم و نتیجه حاصل را بر مجموع وزن ها تقسیم می نماییم و به این ترتیب ، اطلاعات مربوط به پیکسل چرخش یافته ، استخراج و به آدرس مربوطه ارسال می گردد.

    2- پیاده سازی : فرض کنید تصویر ورودی به صورت ویدیویی با رزولوشن 1024*1024 و مقدار فریم در ثانیه 30 عدد و هر پیکسل نیز 3 بایت باشد ، از آنجا که فرکانس اسکن تصویر 30 فریم در ثانیه باشد ، بنا براین داریم :

    F=30H ---»T=33ms

    به منظور رعایت بلا درنگ بودن مسئله مورد بحث، باید یک فریم از تصویر در زمان 50 درصد پریود، یعنی حد اکثر تا 15 ms پردازش شدهو به خروجی ارسال شود، در صورتیکه زمان پردازش از این مقدار زیادتر طول بکشد ، تصویر خروجی به صورت بلا درنگ بر روی نمایشگر ظاهر نمی شود.تعداد پیکسل های افقی را m و پیکسل های عمودی را n فرض کنید.با این فرض حداکثر زمان پردازش یک پیکسل تصویر خروجی به صورت زیر محاسبه می شود:

    Tp=15ms/m*n



    اگر m=1024 n=1024 باشد،داریم:

    Tp=15ns

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

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

    D=1024*1024*30*24=754Mbit/sec

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

    گیت های قابل برنامه ریزی ، اجرای الگوریتم چرخش تصویر ،خواندن از حافظه ،نوشتن در حافظه، کد کردن و کد برداری اطلاعات خروجی و ورودی و دیگر ارتباط های با مدارات و وسایل جانبی از جمله دوربین ، اسکنر و مانیتور را به عهده دارند.انتخاب منطقی برای انجام این کار، آرایه ای از گیت های قابل برنامه ریزی (FPGA) می باشد. بعد از محاسبه تعداد پین های ورودی و خروجی و حجم پردازش اطلاعات تخمینی از مقدار آرایه منطقی به دست آمده ، یک چیپ از کارخانه Xilinx از خانواده XC4000XLA انتخاب گردید . این چیپ ها در خانواده مزبور از رنج 576 CLB در یک آی سی 192 پینی تا 846 CLB با 560 پین موجود می باشند.چیپ انتخاب شده XC4062XLA با 240 پین می باشد. یک نمونه پبشرفته تر از این خانواده و با قیمت حتی کمتر موجود بود ، اما جهت کاربرد ما انتخاب نشد ،

    به خاطر اینکه ولتاژ تغذیه آن به جای 3/3 ولت ، 2/8 ولت بود ، همچنین این آی سی تعداد پین بیشتر ، ولی با همان تعداد 0/1 در اختیار ما قرار می داد ، بنا بر این همان XC4062XLA جهت کاربرد پروژه انتخاب و الگوریتم چرخش تصویر بر روی آن پیاده شد.

    منبع

    #2
    پاسخ : چرخش تصویر Real Time با کمک FPGA

    آقا من یه پروژه دارم که باید یه تصویر رو با کیفیت 270مگا بیت در ثانیه با استاندارد pal بگیرم و تغییر اندازه بدم ..
    اولا الگوریتمی در این زمینه نداری؟
    و اینکه چه fpga ای می تونه با این فرکانس کار کنه ؟ قیمتش چنده ؟

    ممنون !

    دیدگاه


      #3
      پاسخ : چرخش تصویر Real Time با کمک FPGA

      با سلام خدمت دوستان
      از آقا فرشاد خیلی متشکر به خاطر زحمتی که کشیدن من خیلی به fpga و پروژهاش عالقه دارم از مقالتون متشکرم
      فقط عکساش نیوم اگه عکساش بیاد خیلی بیشتر متشکر :applause:

      دیدگاه


        #4
        پاسخ : چرخش تصویر Real Time با کمک FPGA

        آقا فرشاد کجایی؟ :cry:
        این مقالت بدجور مارو جذب کرده کجایی بیشتر برام توتضیح بدی ؟؟؟؟؟؟؟؟؟؟ :cry: :cry2:
        توخدا بیا :angry:
        در حد التماس :bye

        دیدگاه

        لطفا صبر کنید...
        X