Project1.pdf

‫دانشگاه صنعتی شریف‬
‫دانشکدهی مهندسی کامپیوتر‬
‫بهار ‪3131‬‬
‫پروژهی اول‪ :‬پیادهسازیِ یک سیستم پردازش تصویر برای تشخیصِ موج شوک‬
‫مبانی برنامهسازی‬
‫امید غیبی‬
‫طراحان پروژه‬
‫پیمان فخاریان‬
‫امیرحسین پورشعبان‬
‫‪1‬‬
‫هدف پروژه‬
‫یکی از معضالت همیشگی در هدایت و ناوبری وسایل پرنده‪ ،‬دانستن میزان سرعت واقعی آن است‪ .‬برای رفع این نیاز‬
‫مهندسان سنسورهایی را در قسمتهای مختلف قرار میدهند تا بتوانند با استفاده از ویژگیهایِ سیال عبوری‪ ،‬میزان‬
‫سرعت پرنده را اندازهگیری کنند اما نکتهای که وجود دارد‪ ،‬وجود خطا در این سنسورهاست و برای برنامهریزی کامپیوتر‬
‫پرواز نیازمند دانستن میزان خطای این سنسورها هستیم‪ .‬لذا باید این سنسورها را با روش دیگری نیز تست کرد‪.‬‬
‫یکی از روش های تست سرعت برای هواپیماهای مافوق صوت تعیین میزان زاویه شوک هواپیماست؛ بنابراین هدف پروژه‪،‬‬
‫ت پرنده بر اساس موجهای شوک تشکیل شده بر روی آن است‪.‬‬
‫تعیین سرع ِ‬
‫توضیحات علمی‬
‫ی ما به صورت‬
‫به منظور استفاده علمی بر اساس شواهد از پرندهی مورد نظر عکاسی میشود؛ بنابراین اطالعات اولیه ِ‬
‫عکس است اما چگونه می توان بر اساس عکس یک پرنده سرعت حرکت آن را تشخیص داد؟‬
‫ذات طبیعت!‬
‫طبیعت یک روال همیشگی دارد؛ ما نیز آن را در شرایطی دیدهایم‪ ،‬آن را یافتهایم‪ ،‬آزمایشش کردهایم و در آخر با فهم‬
‫انسانیمان آن را تحلیل کردهایم‪.‬‬
‫موج شوک نیز یک واکنش طبیعت است به یک جسمِ پُرسرعت اما جالب است که این موج تغییر خواص خود را نسبت‬
‫به زاویهی جسم و نه ابعاد آن میدهد‪.‬‬
‫همان طور که مالحظه می کنید در ارتباط با یک موج چند پارامتر اهمیت دارند‪:‬‬
‫سرعت ها قبل و بعد از موج‪ ،‬زاویه ی جسم (‪ )Θ‬و زاویه ی شوک (‪)β‬‬
‫ق هواپیمای مورد استفاده را داریم‪.‬‬
‫زاویه ی جسم (‪ )Θ‬مشخص است؛ زیرا همیشه ابعاد دقی ِ‬
‫‪2‬‬
‫سرعتها‪ :‬بر اساس آزمایشات و تئوریهای مطرح‪ ،‬ارتباط میان سرعت ها‪ Θ ،‬و ‪ β‬را میدانیم‪.‬‬
‫جدول زیر یکی از جداولی است که به کمک ما میآید و با کمک اطالعاتی که در تونلهای باد به دست آمده است‬
‫کشیده شده است‪.‬‬
‫پس تنها مجهول ما در این مسئله زاویه شوک است که شما باید آن را با استفاده از پردازش تصویر به دست بیاورید‪.‬‬
‫برای دیدن تصاویر بیشتر می توانید واژه های زیر را گوگل کنید‪.‬‬
‫‪Schlieren photography - Oblique shockwave‬‬
‫‪3‬‬
‫هدف برنامهسازی‬
‫هدف شما در این پروژه‪ ،‬طراحی یک واح ِد پردازش تصویر است که بتواند هواپیما و موج شوک آن را پیدا کند‪.‬‬
‫پروژه کامال بر مبنای قوهی تفکر شما بنا شده و از هرگونه ایدهی جدید‪ ،‬بسیار استقبال میشود‪ .‬ایدههای شما میتواند در‬
‫بخشهای مختلفِ پروژه‪ ،‬در حالتهای جزیی‪ ،‬ایجاد امکانات جدید برای واح ِد پردازش تصویر و ‪ ...‬باشد‪.‬‬
‫صورت پروژه‬
‫با تصاویر دیجیتال آشنایی دارید! این تصاویر با دو عدد نشان داده میشوند؛ به عنوان مثال‪ ،‬یک عکس ‪،002×042‬‬
‫میتواند عکسی باشد که ارتفاع آن ‪ 002‬پیکسل و طول آن ‪ 042‬پیکسل است؛ بنابراین چنین عکسی دارای ‪00822‬‬
‫پیکسل (نقطه) است‪ .‬در زبان ‪ ،C‬شما هر تصویر را با یک آرایهی دوبعدی و هر پیکسل را با یک نقطهی این آرایه نشان‬
‫میدهید‪ .‬به عنوان مثال‪ ،‬شما عکس ‪ 002×042‬باال را میتواند با یک آرایهی دوبعدی به طول افقی ‪ 042‬و ارتفاع ‪002‬‬
‫نشان دهید که در عمل باعث تعریف آرایهی ‪ Image‬به صورت ]‪ Image[320][240‬میشود‪ .‬هر عضو آرایه به صورت‬
‫]‪ Image[i][j‬یک پیکسل را نشان میدهد‪.‬‬
‫آرایهی تعریفی شما (‪ )Image‬باید از نوع ‪ int‬باشد‪ .‬در عمل برای هر پیکسل‪ ،‬سه عدد در نظرگرفته میشود‪ .‬این اعداد که‬
‫به ‪ RGB‬معروف هستند‪ ،‬نشاندهندهی نور (رنگ) قرمز‪ ،‬سبز و آبی در هر نقطه هستند و میدانید که سایر نورها را‬
‫میتوان با این سه نور ساخت‪ .‬هرکدام ازین نورها در کامپیوتر‪ ،‬با یک بایت (‪ )022-2‬نشان داده میشود‪ .‬برای راحتیِ کار‬
‫شما در این پروژه‪ ،‬به جای سه عدد‪ ،‬تنها یک عدد به عنوان رنگ هر نقطه داده میشود؛ بنابراین آرایهی ‪ Image‬شما‪،‬‬
‫محتوی مقادیری از ‪ int‬است که بین صفر تا ‪ 022‬قرار دارند‪ .‬عدد صفر به معنای سیاه و عدد ‪ 022‬به معنای سفید است‪.‬‬
‫با دادن این آرایه به شما‪ ،‬باید بتوانید هواپیما و موج شوک حاصل از آن را پیدا کنید‪ .‬به جدول زیر توجه کنید‪ .‬هرعضو‬
‫این جدول‪ ،‬یک عضو آرایهی ‪ Image‬را نشان می دهد‪ .‬فرض کنید که این آرایه تنها از اعدا ِد صفر (مشکی)‪( 022 ،‬سفید)‬
‫و‪( 002‬خاکستری) تشکیل شده است؛ بنابراین در این جدول سه رنگ یادشده به صورت زیر مشاهده میشوند‪.‬‬
‫میبینید که هواپیما را میتوانید با چشم به راحتی پیدا کنید و موجهای شوک آن را نیز تشخیص دهید‪ .‬برنامهی شما‬
‫باید بتواند که آرایهی مربوط به تصویر را دریافت کرده و با تشخیص هواپیما و موجهای شوکِ آن‪ ،‬به ما کمک کند‪.‬‬
‫ی شما یک آرایه از اعداد است و در اینجا‪ ،‬به جای نوشتن اعداد در جدول‪ ،‬از رنگها استفاده کردیم‬
‫توجه کنید که ورود ِ‬
‫ت پایین تصویر هواپیما در آرایهی زیر‬
‫تا بتوانید هواپیما و موج شوک آن را آسانتر تشخیص دهید! همچنین از کیفی ِ‬
‫شاکی نباشید! تصویر زیر یک عکس ‪ 04×04‬است و بنابراین کیفیت باالیی ندارد! ما به شما ورودیهایی در ابعا ِد‬
‫‪ 7020×0202‬خواهیم داد!!!‬
‫‪4‬‬
‫‪A‬‬
‫‪A‬‬
‫‪B‬‬
‫‪B‬‬
‫‪B‬‬
‫‪B‬‬
‫‪A‬‬
‫‪A‬‬
‫ی پروژه‬
‫ورودی و خروج ِ‬
‫ورودی برنامهی شما‪ ،‬ابتدا دو عدد ‪ n‬و ‪ m‬است‪ .‬این دو عدد از نوعِ ‪ int‬و حداکثر دارای مقدار ‪ 72222‬هستند‪ .‬سپس‬
‫برنامهی شما باید آرایهی ‪ Image‬را به ابعا ِد ‪ n‬و ‪ m‬ایجاد کند (]‪ )Image[n][m‬که ‪ n‬سطر و ‪ m‬ستون را برای آرایه‬
‫(جدول) مورد نظر ما‪ ،‬تخصیص میدهد‪ .‬در مرحلهی بعدی‪ ،‬ورودی برنامهی شما‪ n×m ،‬عدد از نوع ‪ int‬است که هر یک‬
‫حداکثر مقدار ‪ 022‬دارد؛ به عنوان مثال‪ ،‬در جدول باال‪ ،‬ورودیهای شما به ترتیب ‪ 04‬و ‪ 04‬و بعد از آن ‪ 04×04‬عدد‬
‫خواهد بود!‬
‫‪5‬‬
‫در عمل برای نوشتن و عیب یابی پروژه‪ ،‬نیاز دارید که بارها و بارها ورودی مشخصی را به برنامهی خود بدهید‪ .‬هربار تایپ‬
‫‪ 200( 04×04‬عدد) ‪ ،‬کار آسانی نخواهد بود! ثانیا‪ 200 ،‬عدد‪ ،‬تنها برای تصاویری با رزولوشن ‪ 04×04‬است‪ ،‬درحالیکه ما‬
‫به شما‪ ،‬تصاویری در رزولوشن ‪ 7020×0202‬خواهیم داد که شامل ‪ 4،003،302‬عدد میشود و وارد کردن آن در محیط‬
‫اجرایی برنامه‪ ،‬عمرِ حضرت نوح میطلبد! بنابراین برنامهی شما برای خواندن ورودی از فایلها استفاده میکند‪ .‬در فایل‬
‫پیوست پروژه‪ ،‬توضیحاتی دربارهی فایلها در زبان ‪ C‬آمده است‪ .‬نیازی به دانستن همهی آن نیست‪ ،‬شما تنها باید بتوانید‬
‫از یک فایل‪ ،‬یک سری عدد بخوانید!‬
‫با توجه به اینکه پروژه به صورت حضوری تحویل گرفته می شود‪ ،‬برای نمایش خروجی آن‪ ،‬هیچ الگوی مشخصی وجود‬
‫ندارد! خروجی شما حتما باید شاملِ نقطه ی شروع‪ ،‬پایان و طول موج شوک باشد؛ همچنین نمایش زاویهی شوک باید در‬
‫دستور کار شما قرار گیرد‪ .‬منظور از نقطه ی شروع‪ ،‬جایی است که موج از هواپیما شروع میشود و نقطهی انتهایی جای‬
‫است که موج شوک پایان مییابد‪ .‬در شکل باال نقاط انتهاییِ موج شوک با ‪ A‬و نقاط ابتدایی با ‪ B‬مشخص شدهاند‪.‬‬
‫قوانین‬
‫‪ -7‬دستورات استفاده شده در برنامهی شما‪ ،‬باید منطبق بر زبان ‪ C‬استاندارد باشد؛ بنابراین استفاده از آرایه با طول‬
‫دریافتی از کاربر (که در محیط ‪ Dev‬امکانپذیر است) و توابعِ کتابخانهی ‪ Conio.h‬سابق مثل ‪ Goto‬و ‪Clrscr‬‬
‫و ‪ ...‬منجر به نمرهی صفر خواهد شد‪.‬‬
‫‪ -0‬پروژهی شما با استفاده از مطالبی که تاکنون در کتاب درسی و جزواتِ داده شده‪ ،‬خواندهاید‪ ،‬قابل نوشتن است‬
‫ولی برای راحتی کار خود می توانید از توابع و امکاناتِ دیگر نیز استفاده کنید‪ .‬ترجیحِ ما‪ ،‬نوشتنِ پروژه از سوی‬
‫شما با استفاده از مطالبی است که تاکنون خواندهاید! استفاده از دیگر توابع نباید به گونهای باشد که سرعت‬
‫برنامهی شما را زیاد کاهش دهد‪.‬‬
‫ت دیگر‪ ،‬چنانچه اختالف کلیِ خانههای آرایه‬
‫‪ -0‬اختالف عدد رنگها تا مقدار ‪ ،72‬قابل چشمپوشی است‪ .‬به عبار ِ‬
‫مربوط به موج شوک‪ ،‬عددی کمتر از ‪ 72‬داشته باشند‪ ،‬میتوان آن دو را یک رنگ در نظر گرفت‪.‬‬
‫گ هواپیما بین صفر و بیست خواهد بود‪ .‬پسزمینه و خطوط موج شوک میتواند هر رنگی‬
‫‪ -4‬عد ِد مربوط به رن ِ‬
‫داشته باشد ولی با یکدیگر اختالف رنگ دارند؛ به عنوان مثال‪ ،‬پسزمینه میتواند قرمز (‪ )702‬باشد‪ ،‬در حالیکه‬
‫موج شوک خاکستری (‪ )002‬باشد‪ .‬اختالفِ عددی این دو رنگ بیشتر از ‪ 02‬خواهد بود‪.‬‬
‫‪ -2‬تحویل پروژه به صورت حضوری خواهد بود‪ .‬نمرات شما در هنگام تحویل به خو ِد شما گفته خواهد شد‪.‬‬
‫‪ -0‬در صورتی که احساس شود که به کد ِ خود تسلط ندارید‪ ،‬نمرهی شما صفر خواهد بود! همچنین در هنگام‬
‫تحویل باید بتوانید تمامیِ قسمتهای پروژه را دوباره بنویسید!‬
‫‪ -0‬در نوشتن پروژه میتوانید از همکاری با سایر دوستانتان بهرهمند شوید! با این وجود باید کدهای پروژهی ارائه‬
‫شده از سوی شما‪ ،‬توسط خودتان نوشته شده باشد‪.‬‬
‫‪ -8‬سواالتِ خود را در گروه درس مطرح کنید‪.‬‬
‫‪6‬‬
‫معیارهای نمرهدهی‬
‫‪ -7‬پروژهی شما بدون خطا اجرا شود‪.‬‬
‫‪ -0‬در نوشتن پروژه از تعریف توابع مختلف استفاده شده باشد‪ .‬نوشتنِ توابع‪ ،‬باعث میشود که پروژهی شما خواناتر‬
‫باشد و عیبیابی آن آسانتر انجام شود‪.‬‬
‫‪ -0‬دریافت ورودی از طریق خواندن فایل باشد‪.‬‬
‫‪ -4‬کامنتگذاری مناسب در تمام پروژه انجام شده باشد‪.‬‬
‫ع تولید ورودی نمرهی اضافی خواهد داشت‪ .‬در این حالت‪ ،‬برنامهی‬
‫‪ -2‬استفاده از توابع تولیدِ اعداد تصادفی و یا تاب ِ‬
‫ی اصلیِ خود را تولید کند و از آن در‬
‫شما باید بتواند به جای دریافت ورودی‪ ،‬اعداد مناسب برای آرایهی دو بعد ِ‬
‫اجرای برنامه استفاده کند‪.‬‬
‫‪ -0‬حداقلِ مورد انتظار ما‪ ،‬تشخیص موج شوکِ یک هواپیمای افقی است که موج شوک آن زاویهی چهل و پنج‬
‫درجه داشته باشد‪ .‬تشخیص هواپیمای غیر افقی‪ ،‬تشخیص زاویههای ‪ 02‬درجه و ‪ 02‬درجه‪ ،‬همگی مشمول‬
‫نمرهی اضافه میشود‪.‬‬
‫ط هواپیما‪ ،‬یک نقطهی سوخته به‬
‫‪ -0‬برنامه ی شما باید بتواند نقاط سوخته را نیز درنظر بگیرد‪ .‬در شکلِ باال‪ ،‬در وس ِ‬
‫رنگ قهوهای مشخص شده است‪ .‬برنامهی شما نباید در مواجهه با چنین نقاطی دچار مشکل شود‪ .‬نقطهی‬
‫سوخته هر رنگی (عددی) میتواند داشته باشد ولی اختالف آن با نقاط مجاورِ غیرِسوخته‪ ،‬حداقل ‪ 22‬خواهد‬
‫بود‪.‬‬
‫‪ -8‬همراه با پروژه‪ ،‬یک گزارش (حداقل دو صفحه) پیوست کنید‪ .‬در این گزارش‪ ،‬الگوریتم تشخیصِ الگوی خود و‬
‫نکاتِ کلی مربوط به آن را توضیح دهید‪ .‬فایل گزارش باید در قالب ‪ PDF‬باشد و فرستادن با تاخیر آن‪ ،‬قبول‬
‫نیست‪.‬‬
‫‪ -3‬از هرگونه ایدهی جالب‪ ،‬بسیار بسیار استقبال میشود!‬
‫زمان تحویل پروژه‬
‫خ یکشنبه‪ 7030/7/04 ،‬باید در سیستم داوری (‪ )Judge‬بارگذاری شود‪.‬‬
‫پروژهی شما حداکثر تا ساعتِ ‪ 70‬شبِ تاری ِ‬
‫حتی یک دقیقه تاخیر نیز مشمولِ ارسال با تاخیر میشود؛ بنابراین بهتر است چندین ساعت قبل از این‪ ،‬اقدام به‬
‫ارسال پروژه کنید تا در صورت قطعی اینترنت‪ ،‬ریستشدن کامپیوتر و ‪ ...‬مشکلی برای ارسال نداشته باشید‪.‬‬
‫پروژه به صورت یک فایل ‪ .Zip‬فرستاده شود که در آن فایل‪ ،‬کدهای شما و فایلِ ‪ PDF‬مربوط به گزارشِ کارتان‬
‫قرار گرفته باشد‪ .‬توجه شود که هر مورد خارج ازین قالب‪ ،‬توسط سیستمِ داوری‪ ،‬نادیده گرفته خواهد شد‬
‫و مسئولِ کم شدن نمرهی شما‪ ،‬شخصی غیر از خودتان نخواهد بود!‬
‫‪7‬‬
‫تحویل حضوری احتماال از تاریخ دوشنبه ‪ 7030/7/02‬تا چهارشنبه ‪ 7030/7/00‬گرفته خواهد شد‪ .‬تاریخ قطعیِ آن‬
‫متعاقبا گفته خواهد شد‪ .‬افرادی که پروژهی خود را تا تاریخ ‪ 7030/7/04‬نفرستادهاند‪ ،‬تا تحویل حضوری فرصت‬
‫دارند که ک ِد خود را تکمیل‪ ،‬در سیستم داوری بارگذاری و در هنگام تحویل ارائه دهند‪ .‬در این صورت‪ ،‬نمرهی ثبت‬
‫شده برای شما‪ %02 ،‬نمرهایست که در حالت بدون تاخیر میتوانستید کسب کنید!‬
‫گروه پروژه‬
‫‪8‬‬