اطلاعیه

Collapse
No announcement yet.

پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

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

    چیزی که خیلی دلم میخواد اینه که اینجا یاد بگیریم چطور برای کامپیوتر یک چشم بسازیم :smile: یعنی با وسیله هایی که می تونیم تصویر رو به کامپیوتر منتقل کنیم آشنا بشیم،و با اینکه اون اطلاعات که از این وسیله اومدن،چی هستن آشنا بشیم،و در نهایت بتونیم با کار کردن روی اون اطلاعات،موضوعاتی که برامون مهم هست رو (مثل جای رباطمون و...) بدست بیاریم

    هدف زبان خواصی نیست،من توو C،ویژوال بیسیک،دلفی و مطلب این کار رو کردم،اما ترجیحا توو بحث های اینجا من فقط زبانهای بیسیک و پاسکال رو بررسی میکنم(بنا به دلایل مختلف،از نفرتم از مطلب تا ... و اینکه مطمئنم بقیه هم هستن و می تونن سایر زبانها رو پوشش بدن :smile البته اگر لازم شه،به اونها هم اشاره خواهم کرد

    برای این مبحث،من فکر کنم به عنوان وسیله ورودی ، یک وب کم و یا یک دوربین به همراه کارت کپچر فعلا کفایت کنه

    یک آشنایی ساده با یکی از این زبانها(که به نظرم به عنوان پایه،بیسیک از همه بهتره و بعد به بقیه رفتن) کافیه

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


    من نظرات شخصی خودم رو نوشتم،کمی مشکلات فنی برام پیش اومده،ببخشید که دیر شد،لطفا در قدم اول،افرادی که می تونن همکاری کنن،ضمینه هایی که میتونن،و زبانها و ... رو اعلام کنن،بعد با کمک هم مباحث پایه ای رو شروع کنیم ،و در نهایت به سوال و جوابهای افرادی برسیم که توو این ضمینه مشکل دارن :smile:

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

    منتظر نظرات هستم تا به محض رفع این مشکل فنی آزار دهنده که برام پیش،من قسمت فعالیت خودم رو آغاز کنم :nerd:

    #2
    پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری

    خوب ....
    خیلی متشکر مرتضی جان. انشالا بقیه اساتید هم همکاری میکنند :biggrin:
    فقط امیدوارم دوستان زبان C و Matlab رو هم برسونن که کار تکمیل تر بشه.

    **برای تشکر فقط از گزینه تشکر استفاده کنید.
    ** پست های اضافی بعد از 48 ساعت پاک میشن.

    دیدگاه


      #3
      پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

      سلام.
      خوب مرتضی جان من یه چهارچوب نوشتم شما ببین مناسب هست یا نه:

      1.آشنایی مقدماتی با تصویر
      تصاویر سیاه و سفید
      تصاویر مقیاس خاکستری
      تصاویر 16 رنگه
      تصاویر RGB
      2.آشنایی با قالب ذخیره تصاویر
      تصاویر BMP
      تصاویر JPG
      3.نحوه باز کردن تصاویر
      در C
      در بیسیک
      در متلب
      4.تعاریف
      پیکسل
      همسایگی
      مسیر
      زمینه
      اتصال
      مرز تصویر
      حفره
      هیستوگرام
      آستانه گیری
      5. بیان چند روش
      لبه گیری
      محاسبه مساحت
      نحوه بدست آورن مرکز اشیاء
      چگونگی تشخیص الگو ها یا اشیاء در یک تصویر
      شماره گذاری اشیاء در یک تصویر
      فاصله بین دو شی
      بزرگ نمایی و کوچک نمایی تصاویر
      6. بررسی چند فیلتر پر کاربرد در پردازش تصویر
      شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
      هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
      چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

      دیدگاه


        #4
        1.آشنایی مقدماتی با تصاویر

        به نام خدا
        1. آشنایی مقدماتی با تصاویر
        1-1. تصاویر سیاه و سفید
        (تصاویر سیاه و سفید در واقع ماتریس های دو بعدی هستند که هر بیت نمایانگر یک نقطه از تصویر است. کنار هم قرار گرفتن تمامی این نقاط (بیت ها) در دو بعد تصویر را می سازد. بنا بر این یک اگر یک تصویر 80 در 80 پیکسلِ سیاه و سفید داشته باشیم، در واقع یک ماتریس 10 در 80 بایت داریم.

        1-2. تصاویر مقایس خاکستری
        (در این تصاویر هر بایت (از صفر تا 255) نمایانگر یک پیکسل است. اگه مقدار بایت صفر باشد نمایانگر سیاه مطلق و اگر 255 باشد نمایانگر سفید مطلق هست و بقیه در این رنج از رنگ سیاه تا سفید (خاکستری) قرار خواهند گرفت. در این تصاویر اگر یک تصویر 80 در80 پیکسل داشته باشیم در واقع یک ماتریس دو بعدی با 80 در 80 بایت سطر و ستون خواهیم داشت. و همچنین اگه در تصاویر RGB مقدار هر سه رنگ با هم تغییر کنه یعنی با هم مساوی باشن و از صفر تا 255 تغییر کنه اون موقع باز هم رنگ ما از سیاه مطلق تا سفید مطلق تغییر خواهد کرد)

        1-3. تصاویر 16 رنگه
        ( در این نوع تصاویر جدای از نحوه ذخیره سازی آنها فقط 16 رنگ متفاوت وجود دارد. و به ازای یک تصویر 80 در 80 پیکسل یک ماتریس با همین ابعاد خواهیم داشت.برای ذخیره هر رنگ فقط 4 بیت نیاز داریم و برای همین در هر بایت 2 تا پیکسل ذخیره میشه)

        1-4. تصاویر RGB
        (در این نوع تصاویر با توجه به ترکیب سه رنگ قرمز R ، سبز G و آبی B بقیه رنگ ها ساخته خواهد شد. با توجه به دقت مقداری که می توان به هر کدام از این 3 رنگ اختصاص داد طیف رنگ ها گسترش می یابد. مثلا اگر به هر کدام از این سه رنگ مرجع یک بایت اختصاص یابد، 2 به توان 24 حالت می توانند ایجاد کنند که تعداد رنگ های قابل نمایش برای ان خواهد بود. ولی اگر برای هر کدام از رنگ های مرجع 2 بایت در نظر گرفته شود(که این بستگی به کارت گرافیک دارد) 2 به توان 48 رنگ بوجود خواهد آمد. نحوه به نمایش در آمدن تصاویر RGB نیز به این صورت است که یک DAC برای هر بایت در نظر گرفته شده است و شدت ولتاژی که هر کدام از بخش های R ، G یا Bآ‌ ایجاد میکند در نهایت رنگی را که تلفیق شدت ولتاژ این سه بخش است، به نمایش در می آورد. و البته یک بخش دیگر هم بعدا به تصاویر افزوده شد با نام alphaآ‌ که نمایانگر شدت شفافیت است پس تصویر نهایی 4 قسمت خواهد بود RGBA)

        شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
        هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
        چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

        دیدگاه


          #5
          پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری


          نوشته اصلی توسط محمد نحوی

          1-1. تصاویر سیاه و سفید
          (تصاویر سیاه و سفید در واقع ماتریس های دو بعدی هستند که هر بیت نمایانگر یک نقطه از تصویر است. کنار هم قرار گرفتن تمامی این نقاط (بیت ها) در دو بعد تصویر را می سازد. بنا بر این یک اگر یک تصویر 80 در 80 پیکسلِ سیاه و سفید داشته باشیم، در واقع یک ماتریس 10 در 10 بایت داریم.
          خوب چون قراره رفع اشکال کنیم :nerd: در واقع ماتریسمون 10*80 بایت میشه فکر کنم ...

          نوشته اصلی توسط محمد نحوی

          1-2. تصاویر مقایس خاکستری
          (در این تصاویر هر بایت (از صفر تا 255) نمایانگر یک پیکسل است. اگه مقدار بایت صفر باشد نمایانگر سیاه مطلق و اگر 255 باشد نمایانگر سفید مطلق هست و بقیه در این رنج از رنگ سیاه تا سفید (خاکستری) قرار خواهند گرفت. در این تصاویر اگر یک تصویر 80 در80 پیکسل داشته باشیم در واقع یک ماتریس دو بعدی با 80 در 80 بایت سطر و ستون خواهیم داشت)
          یه توضیح کوچولو بدم،اگه توو عکس رنگی RGB مقدار شدت رنگ r و g و b ‌رو یکسان بگیریم،طیف خاکستری به دست میاد :smile: پس کافیه عدد 0-255 رنگ رو به هر کدوم از این r و g و b ها اختصاص بدیم ..



          نوشته اصلی توسط محمد نحوی


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

          نوشته اصلی توسط محمد نحوی


          1-4. تصاویر RGB
          (در این نوع تصاویر با توجه به ترکیب سه رنگ قرمز R ، سبز G و آبی B بقیه رنگ ها ساخته خواهد شد. با توجه به دقت مقداری که می توان به هر کدام از این 3 رنگ اختصاص داد طیف رنگ ها گسترش می یابد. مثلا اگر به هر کدام از این سه رنگ مرجع یک بایت اختصاص یابد، 2 به توان 24 حالت می توانند ایجاد کنند که تعداد رنگ های قابل نمایش برای ان خواهد بود. ولی اگر برای هر کدام از رنگ های مرجع 2 بایت در نظر گرفته شود(که این بستگی به کارت گرافیک دارد) 2 به توان 48 رنگ بوجود خواهد آمد. نحوه به نمایش در آمدن تصاویر RGB نیز به این صورت است که یک DAC برای هر بایت در نظر گرفته شده است و شدت ولتاژی که هر کدام از بخش های R ، G یا B‌ ایجاد میکند در نهایت رنگی را که تلفیق شدت ولتاژ این سه بخش است، به نمایش در می آورد.
          معمولا توو کارت گرافیکی عنصری به اسم RAMDAC هست،صفحه مانیتورتون رو با ذره بین نگاه کنین(حتی تلویزیون)

          ما 3 رنگ اصلی در نقاشی رو داریم : زرد قرمز آبی (رنگ ها مثل سیاره ها،از خودشون نور ندارن...)
          اما برای 3 نور اصلی(مثل ستاره ها :mrgreen سبز قرمز و آبی رو داریم

          از ترکیب این 3 نور،همه رنگها به دست میاد ،توو صفحه مانیتور و تلویزیون،می تونین این پیکسل ها رو ببینین،یعنی نحوه ایجاد تصویر توو تلویزیون اینه که چندین نقطه که میتونه ترکیبی از این 3 نور اصلی رو تولید کنه کنار هم قرار گرفتن،مثلا اگر حداکثر رزولوشن مانیتور شما 1024*768 باشه،یعنی به این تعداد نقطه که میتونه این 3 نور رو تولید کنه کنار هم هستن ...
          یه توضیح بدم که چرا من مانیتور CRT رو به LCD ترجیح میدم!!!‌چون این تعداد پیکسل توو CRT ها بیشتره ... بهترین LCِD به زور به 1280*1024 نقطه می رسه،اما الان اکثر CRT ها 1600*1200 رو پشتیبانی می کنن.این سوای تعداد رنگی هست که هر نقطه از خودش نشون می ده ...

          پس هر نقطه خودش از 3 نقطه تشکیل شده که یکی برای سبر،یکی قرمز و آخری آبی هستش ...
          حالا ما باید میزان روشن شدن هر کدوم از این نقطه ها رو به ازای هر کدوم از مثلا 1024*768 نقطه تعیین کنیم
          معمولا در کارتهای اولیه یک DA‌8 بیتی توو کارتها بود به ازای هر رنگ،یعنی 8 بیت سبز،8 بیت قرمز ،8 بیت آبی که 24 بیت رو تشکیل میداد،بعد از مدتی اطلاعاتی دیگه مطرح شد که میزان شفافیت اون نقطه رو نشون می داد،یعنی نقطه نشون داده بشه یا نه ...

          اون هم براش یک بایت در نظر گرفتن ...
          نوشته اصلی توسط امیرعلی بلورچیان
          یک سوال دارم....
          در تنظیمات رنگی ما 16bit و 32bit رو داریم آیا اینها هم جزو این دسته بندی رنگ ها هستن یا کلا قضیش فرق میکنه؟
          حالا اگه rgba یا همون (red green blue alpha) رو 4 بیتی نگه داریم،میشه 16Bit و اگه همه رو 8بیتی نگه داریم میشه 32 بیتی :smile:

          خدایا من چقدر قروقاطی می نویسم!!!

          اون بالا که توو ظیف خاکستری حرف زدم،پس اگه مثلا عدد هر کدوم از عنصر های r ,g , b‌ برای نمایش 0باشه،سیاه رو داریم،اگه همه 255 باشن،سفید رو داریم و وسط این ،یک رنگ خاکستری بین اینها!!

          فعلا درگیر بایت چهارم(a) نشین ... همون 3 بایت r و g و b رو در نظر بگیرین :smile:

          دیدگاه


            #6
            پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

            اموزش زیرو مستقیما از http://www.raminia.com/ip/MatlabIP.htm کپی کردم:
            سلام!

            متنی که الان مطالعه میآ‌کنید یک نمونه کاملاً منحصر بفردی است. چون شبیه هیچ چیز دیگری جز خودش نیست! میآ‌خواهیم کمی آنچه راجعآ‌ بهش صحبت کردیم را دوره کنیم و روی Matlab به صورت عملی ببینیم و باور کنیم که میآ‌شود... سعی شده همه چیز از اول شرح داده شود. اگر حوصله موضوعات ابتدایی کار ندارید میآ‌توانید از شماره 4 شروع به خواندن کنید. اما توصیه عملی این است که از اول شروع کنید چون این نوشته یک راهنمای قدم به قدم است. پس بهتر است پلهآ‌ها را 4 تا یکی نکنیم.



            1. آشنایی با Matlab و Image Processing Toolbox

            همه با Matlab آشنا هستیم و حداقل میآ‌دانیم که چیز بدردخوری است. پس از صحبت درباره این میآ‌گذریم. اما Image Processing Toolbox از امکانات جنبی این برنامه است. برای اینکه مطمئن شوید که این Toolbox روی Matlab شما نصب شده است؛ دستور ver را اجرا کنید. این دستور لیست هرچه که از Matlab روی رایانه شما نصب شده است را ارائه میآ‌دهد. بین Matlab 5.x و Matlab 6 برای کار پردازش تصویر تفاوت چندانی وجود ندارد اما مثل همیشه نسخه جدیدتر امکانات بیشتری دارد که البته فعلا با آنها کاری نداریم.

            دستورآ‌های معرفی شده: ver



            2. چگونه یک فایل تصویر را در Matlab باز کنیم

            Matlab میآ‌تواند فایلآ‌های گرافیکی با فرمتآ‌های JPEG, TIFF, GIF, BMP, PNG, HDF, PCX, XWD, ICO, CUR را به عنوان فایل گرافیکی بخواند. مثلاً برای وارد کردن تصویری به نام cameraman.tif به فضای Matlab کافی است از دستور imread استفاده کنیم:

            MyImage=imread('cameraman.tif','tif '

            توجه داشته باشید که فایلی که دستور خواندنش را میآ‌دهید باید برای برنامه قابل دسترس باشد. یعنی یا باید در مسیر (Path) Matlabآ‌ باشد یا اینکه در پروندهآ‌ای (folder) قرار داشته باشد که در حال حاضر برنامه به آن دسترسی دارد. برای اینکه بدانید که Matlab برای پیدا کردن فایلی که دستورش را دادید کجا را خواهد گشت اینکارها را بکنید: از دستور path برای اینکه بدانید کدام پروندهآ‌ها جزء مسیر پیشآ‌فرض Matlab است و از دستور dir برای اینکه بدانید که Current Directory چیست؛ استفاده کنید.

            خب تا اینجا یک فایل تصویر را در محیط Matlab وارد کردهآ‌ایم. همانطور که میآ‌دانیم یک تصویر دیجیتال بر روی کامپیوتر در قالب یک ماتریس ذخیره میآ‌شود. پس MyImage مثل همه متغیرهای Matlab یک ماتریس است. برای اینکه بدانیم فایل خوانده شده از چه فرمتی است(سیاه سفید، یا Gray Scale یا رنگی ) میآ‌نویسیم:

            imfinfo('cameraman.tif&#039

            این دستور را اجرا کنید و ببینید چه میآ‌نویسد... اما اگر بخواهید بدانید که ماتریس ذخیره شده MyImage از چه نوعی است کافی است بنویسد: whos و لیست متغییرهای مقیم شده در حافظه و نوع و اندازه آنها را ببینید.

            دستورهای معرفی شده: imread, imfinfo, whos, path, dir







            3. چطور تصویر را ببینیم؟

            خب حالا میآ‌خواهیم تصویر را که در یک ماتریس ذخیره شده است را ببنیم. بنویسید:

            imshow(MyImage)

            جالب است نه؟ فکر میآ‌کنید اگر بخواهیم دوتا تصویر را با هم ببنیم باید چکار کنیم؟ این را امتحان کنید:

            YourImage=imread('tire.tif','tif&#0 39;

            figure

            subplot(1,2,1), imshow(MyImage), title('MyImage&#039

            subplot(1,2,2), imshow(YourImage), title('YourImage&#039

            با اجرای این دستورات به آن چیزی که اتفاق افتاد توجه کنید؛ حتما متوجه میآ‌شود که هرکدام از این دستورات چکار میآ‌کنند.

            دستورهای معرفی شده: imshow, subplot, title, figure







            4. تصویر را خواندیم حالا چکار کنیم؟

            کمی نویز دستآ‌وپا میآ‌کنیم و به تصویر اضافه میآ‌کنیم که بعداً راهی پیدا کنیم حذفش کنیم:

            imagen=imnoise(MyImage,'salt & pepper'

            imshow(imagen)

            دستور imnoise نویزهای مختلفی را در اختیار ما میآ‌گذارد که به تصویر اضافه کنیم. افزودن نویز برای شبیه سازی اشکالاتی است که ممکن است به هر سیستم پردازش تصویر وارد شود. اینجا فرض کردهآ‌ایم که نویز «نمک و فلفل» به تصویر اضافه شده است! اسمش عجیب غریب است؟ این نویز را روی تصویر تلویزیونآ‌تان اگر آنتن درست تنظیم نباشد حتما دیدهآ‌اید. میآ‌دانیم که وقتی نویز داریم با یک فیلتر حذفش میآ‌کنیم. فیلتری که انتخاب میآ‌کنیم باید مناسب نویزی باشید که روی تصویر سوار شده است. بهترین فیلتر برای نویز «نمک و فلفل» فیلتر میانه است که در Matlab با دستور Medfilt2 قابل استفاده است:

            figure

            imagefilt=medfilt2(imagen);

            imshow(imagefilt)

            برای دستآ‌گرمی هم که شده سعی کنید تصویر نویز و تصویر فیلتر شده را در یک صفحه واحد نمایش دهید.

            دوباره به تصویر MyImage نگاه کنید. فرض کنید میآ‌خواهیم مارک دوربین درون عکس را از روی شکل آن تشخیص دهیم. بازهم فرض کنید به روشی که بعدا بیشتر راجع بهش صحبت میآ‌کنیم فهمیدیم که دوربین درون این مختصات از تصویر قرار دارد. بین سطر 59 تا 84 و ستون 131 تا 170. پس از همین مختصات تصویر را با دستور imcrop میآ‌بریم.

            imagecrop=Imcrop(MyImage,[ 131 59 39 25]);

            در این دستور مختصات برش را اینطور میآ‌نویسم ] ارتفاع ,پهنا ,حداقل y ,حداقل x [. این قسمت بریده شده را نمایش بدهید و ببینید. در مرحله بعد سیستم تشخیصآ‌دهنده نوع دوربین احتیاج دارد که اندازه تصویر مقدار خاصی مثلاً 120x100 باشد. پس باید اندازه تصویر برش داده شده را تغییر دهیم:

            imagesz=imresize(imagecrop,[120 100]);

            تصویر جدید را نگاه کنید. میآ‌بینید که به اندازه جدید در آمده است.

            دستورهای معرفی شده: imnoise, medfilt2, imcrop, imresize







            5. کمی خلاقیت مهندسی!

            یک فایل جدید باز میآ‌کنیم که عکسی از دانهآ‌های برنج است. میآ‌خواهیم دانهآ‌های برنج را درون عکس بشماریم. این عکس از قسمت برنج مرغوبِ خط تولید یک کارخانه است. شمارش دانهآ‌های برنج به کارخانه برنج سازی کمک میآ‌کند بداند چند درصد برنجآ‌هایش درجه یک هستند. این دستورات را اجرا کنید:

            p=imread('rice.tif'

            re=edge(p,'sobel'

            imshow(re)



            re2=edge(p,'canny'

            figure, imshow(re2)

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

            a. الگوریتمی پیدا کنید که تعداد برنجآ‌های درون عکس را بشمارد.آ‌(راهنمایی: اگر بتوانید تعداد مسیرهای بستهآ‌ی درون تصویر لبهآ‌ها را بشمارید تقریباً همه برنجآ‌ها را شمردهآ‌اید)

            b. کشف کنید که روش Canny برای مشخص کردن لبه چه روشی است و چطور عمل میآ‌کند و چرا از روش ساده Sobel بهتر است.

            برای بهتر شده نتیجه کار با روش Sobel بهتر است از عملگرهای ریختآ‌شناسی (morphological) استفاده کنیم. سعی میآ‌کنیم قسمتآ‌های نزدیک به هم لبه هر برنج را به هم متصل کنیم. با این کار لبه برنجآ‌ها را کامل میآ‌کنیم و خوردگیآ‌ها را از بین میآ‌بریم. اما قبل از ادامه کار دستور close all را امتحان کنید. این دستور همه figure هایی که باز هستند را میآ‌بندد تا زیاد شلوغ نشود! حالا این دستورها را اجرا کنید:

            figure, imshow(re)

            re4=bwmorph(re,'close'

            re5=bwmorph(re4,'bridge'

            figure, imshow(re5) , title(‘after morphological operations&rsquo

            آخرین تصویر لبهآ‌ها را با تصویر اولیه لبهآ‌ها که همان re است مقایسه کنید. میآ‌بینید که در متصل کردن قطعات پیشرفت خوبی داشتیم. اولین دستور bwmorph عمل Closing را روی تصویر انجام میآ‌دهد و دومین دستور عمل Bridge. برای اینکه بدانید هرکدام از این دستورات چکار میآ‌کنند از help bwmorph استفاده کنید.

            برای اینکه بهتر کار با این دستورها را یاد بگیریم سری به Demoهای Matlab میآ‌زنیم. در صفحه Matlab بنویسید: demo و با اجرا کردن این دستور لیست demoآ‌های مختلف ظاهر میآ‌شود. Image Processing Toolbox را انتخاب کنید. و در لیست کناری Edge Detection را انتخاب کنید. بقیه ماجرا با خودتان!

            دستورهای معرفی شده:edge, bwmorph, demo







            6. هیستوگرام تصویر:

            تا به حال تصویرهای Gray Scale را بررسی کردیم. از این به بعد هم همین کار را میآ‌کنیم! با این تفاوت که اگر تصویر ورودی رنگی بود اول Gray Scaleآ‌اش میآ‌کنیم و بعد کارها را ادامه می دهیم.

            تصویر flowers.tif را با دستور imread در ماتریس flowers ذخیره کنید. از دستور rgb2gray برای تبدیل فرمت رنگی تصویر به Gray Scale استفاده کنید. حالا هیستوگرام تصویر را رسم کنید. بعد یکی از قلهآ‌های نمودار هیستوگرام را انتخاب کنیدکه بین دوتا دره باشد. کاری کنید که فقط این قله درون هیستوگرام باقی بماند. بعد با دستور im2bw تصویر را از Gray Scale به سیاه سفید تبدیل کنید و نتایج را مقایسه کنید!

            چطور شد؟ توضیح میآ‌دهم، اینطوری:

            flowers=imread('flowers.tif','tif&# 039;

            flowersgray=rgb2gray(flowers);

            imhist(flowersgray)

            من هیستوگرام را نگاه کردم و شما هم نگاه کنید. (هیستوگرام تصویر را بادستور imhist کشیدم) قله بین 50 و 100 را انتخاب میآ‌کنم. حالا یک ماتریس جدید میآ‌سازم طوری که فقط جاهایی که مقدار ماتریس flowersgray در محدوده 50 تا 100 است، در ماتریس جدید 0 باشد و باقی جاها 1 باشد.(یعنی یک ماتریس باینری یا سیاه سفید):

            f=ones(size(flowersgray));

            f(find(flowersgray>50&flowersgray<100))= 0;

            imshow(f)

            دستورهای بالا به این معنی است: ماتریس f را همآ‌اندازه ماتریس flowersgray بساز. همه درایهآ‌هایش را یک بگذار. بعد دستور find درون ماتریس flowersgray جستجو میآ‌کند و شماره درایهآ‌هایی از ماتریس flowersgray را به من میآ‌دهد که در شرط روبهآ‌رو برایش مشخص شده. (همان محدوده 50 تا 100). این درایهآ‌های بخصوص را در ماتریس f از 1 به 0 تبدیل میآ‌شود. نتیجه را باهم ببینیم!

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

            حالا دستور im2bw را - که تصویر را سیاه سفید میآ‌کند - امتحان کنید.

            bwflowers=im2bw(flowersgray,gray);

            imshow(bwflowers)

            دستور im2bw حدی تعیین میآ‌کند و درایهآ‌هایی که از آن حد کمتر باشند را صفر و آنهایی که بیشتر هستند را یک میآ‌کند. آیا متوجه تفاوت دو روش شدهآ‌اید؟ اگر به جای گلدون در تصویر مورد نظر، عکس پرسنلی افراد بود چه اشکالی در روش im2bw وجود داشت؟

            دستورات معرفی شده: rgb2gray, imhist, ones, find



            7. اگر ما روبات بودیم...

            خب فرض کنید برنامهآ‌ای برای یک روبات میآ‌نویسید که با استفاده از یک دوربین به یک بازوی دقیق فرمان میآ‌دهد که سکهآ‌های «اسکروچ» را بردارد و روی هم قرار دهد. برای اینکار لازم است محل دقیق سکهآ‌ها را تشخیص دهیم تا فرمان مناسب برای بازو صادر شود. برنامه زیر این کار را انجام میآ‌دهد. دقت کنید ببینید که چطور اینکار را انجام میآ‌دهد:

            coins = imread('eight.tif'

            BW=~im2bw(coins,.75);

            imshow(BW)

            L = bwlabel(BW);

            stats = imfeature(L,'Centroid'

            stats(7)

            خروجی همان متغییر stats است. این متغییر 7 عنصر دارد. درحالی که 4 سکه بیشتر درون تصویر وجود ندارد! اشکال از کجاست؟.... راه حلی هم برای این به ذهنتان میآ‌رسد؟

            دستورهای معرفی شده: bwlabel, imfeature





            8.با اینترنت یاد بگیریم:

            به آدرس www.ph.tn.tudelft.nl/hpise/index.html مراجعه کنید و در کلاس آنلاینِ مجانیآ‌اش ثبتآ‌نام کنید. من آنجا به اسم raminia عضو هستم. خیلی جالب است! حتما امتحانش کنید.
            منبع رو هم که گفتم
            {خلاف قوانین - امضا ویرایش شد}

            دیدگاه


              #7
              2. آشنایی با قالب ذخیره سازی تصاویر

              2. آشنایی با قالب ذخیره سازی تصاویر
              من شخصا مطالعه زیادی در این زمنیه نداشتم. و چون فعلا چندان تاثیری در کار ما نداره از این بحث میگذرم تا هر زمانی که مرتضی جان فرصتش رو داشتن بحث رو دنبال کنن. برای دوستانی که به این بحث علاقه دارن لینک توضیحات به زبان انگلیسی رو گذاشتم.
              2-1. تصاویر BMP
              http://en.wikipedia.org/wiki/Windows_and_OS/2_bitmap
              2-2. تصاویر JPEG
              http://en.wikipedia.org/wiki/JPEG
              موفق باشید.
              شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
              هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
              چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

              دیدگاه


                #8
                3.نحوه باز کردن تصاویر

                3. نحوه باز کردن تصاویر
                3-1. در C
                برنامه تحت داس برای باز کردن تصاویر BMP رو دارم ولی کامل نیست از طرف دیگه فکر نکنم دیگه کسی تحت داس بخواد تصاویر رو باز کنه. توی محیط ویژوال هم تا به حال کدش رو ننوشتم. مرتضی جان زحمت این کار با شما.
                3-2. در بیسیک
                مرتضی جان دست شما رو میبوسه.
                3-3. در متلب
                متلب تمامی توابع مورد نیاز برای خواندن یک تصویر را در اختیار کاربر قرار می دهد. برای خواندن یک تصویر کافیست از دستور زیر استفاده نمایید


                به عنوان مثال


                اگر کد بالا را در متلب بنویسید تصویر در متغییر به نام ansآ‌ ذخیره می شود. می توان با گذاشتن یک نام قبل از دستور ، تصویر را در آن متغییر ذخیره کرد:


                برای نمایش تصویر می توان از دستور:

                استفاده نمود.

                نکته بسیار مهم در کار با تصاویر در متلب این است که برای انجام اعمال ریاضی مثل ضرب و تقسیم باید ابتدا نوع آن را تغییر دهید برای این منظور باید از دستور

                استفاده نمود.

                تا زمانی که ماتریس تصویر به صورت double است، نمیتوان آن را با دستور imshowآ‌ نمایش داد(اگر تغییراتی در ماتریس داده نشده باشد این کار امکان پذیر است). برای نمایش مجدد تصویر باید آنرا مطابق دستور زیر به حال اولی برگرداند.


                موفق باشید
                شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                دیدگاه


                  #9
                  پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

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




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

                  خوب،گفته بودم یک تصویر مجموعه ای از نقاط کنار همه که هر نقطه می تونه تغییر داشته باشه!!(چی گفتم،یکی این رو دوبله کنه!!آ‌) ،مثلا همین تابلو روان که می خواین بسازین،یک تعداد ledآ‌رو کنار هم می زارین که هر کدوم می تونه روشن یا خاموش باشه

                  حالا کیفیت تصویری که بدست میاد،به این نقاط شما بستگی داره،مثلا مثل تابلو روان،تعداد اونها کم باشه و فقط بتونن روشن یا خاموش باشن، و نقاط بزرگ باشن،خوب تصویری که می بینین زیاد کیفیت نداره و اصولا چیزی به اسم عکس رو نمی شه به این راحتی باهاش نشون داد
                  حالا اگه بیاین مثل یک تلویزیون تعداد این نقاط رو زیاد در نظر بگیرین و همچین هر کدوم از این نقاط، به جای روشن خاموش،بتونن رنگهای زیادی هم تولید کنن،به تصویر و ... می رسین
                  خوب،یک عکس که با دوربین عکاسی می گیرین یا از دوربین فیلم یرداری می رسه یا نقاشی می کنین یا ... باید بتونه حاوی اطلاعاتی باشه که به این نقاط نمایشگر شما،بگه چطور روشن یا خاموش باشن،تا در کنار هم اون تصویر رو ایجاد کنن
                  پس نتیجه گیری آسونه که اون عکس حاوی اطلاعاتی میشه که به طور ماتریسی،رنگ هر نقطه رو نگه داشته
                  موضوع پردازش تصویر ما هم اینه که بتونیم این نقاط رو بخونیم و از نحوه کنار هم قرار گیریه اونها اطلاعاتی که می خوایم رو بفهمیم
                  همونطور که گفته بودم،3 نور اصلی داریم،یعنی اگر هر نقطه از تصویر ما بتونه ترکیبی از این 3 نور رو اونطور که می خوایم تولید کنه ، می توننه به هر رنگی که بخوایم،نور تولید کنه . و همونطور که گفته بودم اصولا برای هر رنگ اصلی،یک بایت در نظر گرفته می شه،پس کلا 3 بایت به اضای هر نطه برای رنگها وجود داره،و یک بایت هم به این 3 بایت اضافه می شه که بعدا کاربرد اون رو توضیح خواهم داد اما دونستنش لازم هم نیست.شاید بشه گفت پایه ای ترین تصویری که می تونین تولید کنین،همینه،توو ویندوز بهش :BitMap یا همون نقشه بیتی میگن!!آ‌
                  وقتی می خواین فایلی رو توو کامپیوتر ذخیره کنین(مثلا یک فایل txt حاوی اطلاعات یک متن که نوشتین) سوای اینکه باید بایت به بایت اطلاعات کد اسکی حروفی که قرار هست پشت سر هم نوشته بشن رو نگه دارین،چنئ بایت ابتدایی فایلی که باز کردین رو به فرمت خواصی با بایت های مشخص شده ای پر می کنن،پاید تا امروز براتون پیش اومده که پسوند فایلی رو پاک کردین،بعد مثلا اون رو با نرمافزار ACDsee که ویژه نگاه کردنه عکسه باز کردین،این نرم افزار اتوماتیک بدون داشتن پسوند تونسته تشخیص بده که فایل تصویری از نوع مثلا bitmap هست و اطلاعات اون رو نمایش داده،خیلی سادست،شعبده بازی که انجام نشده،نرم افزار فقط اطلاعات اون چند بایتی که گفتم اول به طور مشخصی چیده میشن رو خونده و از روی اونها فهمیده که این چه مدا فایلیه و ...
                  به این چند بایت header فایل گفته میشه
                  پس فایل طلاعاتی از این نوع،2 قسمت دارن،یکی هیدر اونها که حاوی نوع فایل و بعضی مشخصات این فایل خواص هست میشه
                  یکی هم قسمت اطلاعات فایل مثل حروفی که توو متن هست،یا اطلاعات رنگ نقاط

                  طول هیدر متفاوته و حتی میتونه چون گفتم شامل اطلاعات خود این فایل خواص هست،طولش در مدل خواصی مثلا بیتمپ هم متغیر باشه

                  بیت مپ استاندارد اگه سن زیادم که پیر شدم :mrgreen: اجازه بده درست بادم بیاد اصولا 54 بایت برای هیدرش داره،و بقیه اطلاعات مال رنگ میشه،اما مثلا بعضی وقتها میان table برای رنگ در نظر می گیرن که اون رو هم به هیدر اضافه می کنن (طول هیدر زیاد میشه) بعد به ازای هر نقطه،شماره رنگش از توو table رو اختصاص می دن ... درگیر این 54 بایت و بقیه اطلاعات و table و اینها نشین،شاید برای اونی که می خواست مستقیم از mmc عکس رو بخونه و توو lcd نشون بده توضیح بدمفاما اینو بدونین الان اونقدر به این اطلاعات قر و قنبیله اضافه شده و هر کسی برای خودش فرمتی اختراع کرده که دیگه قط بهتره وظیفه خونده شدن عکس رو به خود زبان برنامه نویسیمون بدیم ...

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

                  اینجاست که متوجه تفاوت بین دوبینها،نمایشگر ها و پرینتر ها میشیم:
                  دوربینی خوبه که تعداد نقاطی که کنار هم می تونه اطلاعات گیری کنه بیشتری داشته باشه(به هر نقطه پیکسل میگن و اون عدد مگاپیکسلی که روو دوربین هست همین تعداد نقاطه)،مانیتوری خوبه که تعداد نقاط بیشتری کناری هم بتونه تولید کنه(روو قوطی مانیتور مثلا می نویسه 1280*1024) پرینتری خوبه که تعداد نقاط بیشتری کنار هم تولید کنه (همون عدد که مثلا میگه 1200*2400) هر کدوم از اینها بیشتر باشه،بهتره. این یک فاکتور،فاکتور دوم که باید در نظر بگیرین تعداد رنگیه که هر کدوم از این نقاط می تونن از خودشون تولید،یا در دوربین از هم تشخیص بدن،مثلا یک تلویزیون 3000*6000 نقطه ای که هر نقطش با روشنه یا خاموش،تصویرش سیاه سفید میشه و نباید با یک تلویزیون رنگی مقایسه بشه ...

                  حالا ما یک عکس رو از دوربین می گیریم ،سنسور تصویریه این دوربین می تونه 600 نقطه در طول و 800 نقطه در عرض بخونه(به این دوربین مثلا میگن 480k پیکسلی) تصویر رنگیه و به ازای هر رنگ اصلی،یک بایت اطلاعات(یعنی مثلا به ازای رنگ سبز،وجود نداشتن رنگ سبز در ترکیب تولیدی رنگ این نقطه رو معادل 0،کاملا روشن بودن نقطه سبز در تولید رنگ این نقطه رو معادل 255 و برای بقیه یک نسبت این وسط در نظر گرفته بشه)خوب،ما برای هر عکس چند بایت اطلاعات داریم؟ :
                  600نقطه طول*800نقطه عرض * 3 بایت برای هر نقطه =1440000بایت!! یعنی برای یک عکس 0.48 مگا پیکسلی 1.44مگا بایت حجم!!آ‌ خیلی زیاده،اما این استاندارد ترین روش نگه داشتنشه. ولی دیدن که توو هیچ دوربینی این مقدار اطلاعات حروم نمیشه و مثلا یک دوربینه 3 مگا پیکسلی برای هر عکسی که میگیره فوقش 0.5 مگ فضا می گیره.برای این کار عمل فشرده سازی انجام میشه اما بازم میگم این فشرده سازی مهم نیست ،چون خود زبان برنامه نویسیه ما این کار رو انجام میده و بهتره ما عملا توو این مرحله درگیرش نشیم،اما بحث شیرینی داره که من براش وقت زیاد گذاشتم،الانم حس نوشتن ندارم،به وقتش که حالم خوب شد و به جاش که رسیدیم توو بحث ها می گم این کار چطور انجام میشه ...



                  توو بیسیک کافیه یا یک PictureBox رو داشته باشیم و توو خصوصیاتش به راحتی از منوی browseیک عکس رو روو اون بندازیم،یا با دستور loadpicture میشه عکس رو خوند،به فرض اگه بخوایم عکس رو روو یکی از همین ها بندازیم:
                  Picture1.Picture = LoadPicture("c:\a.bmp&quot
                  اما بازم میگم،اینها باید به صورت موردی پیش بیاد،توو برنامه ای که می نویسم دیده میشه و اما هدف اصلیه ما مستقیم و زنده خوندن از دوربینه و ...

                  نمی دونم تا اینجا چی نوشتم چی ننوشتم،بعضی چیزها که می خواستم بگم رو وسط کار فراموش کردم،الان دیکمه ارسال رو می زنم،کم و کسری دیدن بگین اضافه کنم

                  دیدگاه


                    #10
                    پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

                    4. تعارف

                    4-1. پیکسل
                    کوچکترین جزء یک تصویر PIXELآ‌ است . پیکسل مخفف Picture element به معنی المان تصویر است . یک تصویر متشکل از تعداد زیادی پیکسل است که در کنار یکدیگر قرار گرفته اند . در واقع زمانی که با یک دوربین دیجیتال عکس می گیرید اگر رزولوشن دوربین شما 480*640 باشد به این معنی است که ماتریس با ابعاد 480*640 در اختیار شماست که 640 پیکسل در طول و 480 پیکسل در عرض دارد . به ازای هر پیکسل یک سلول نوری در دوربین وجود دارد . شدت نور این سلول نوری مقدار عددی را برای این پیکسل تعیین می کند به طور مثال به ازای رنگ سیاه مقدار صفر در پیکسل ذخیره می شود و به ازای رنگ سفید مقدار 255 در آن ذخیره می شود .

                    4-2.همسایگی
                    2 نوع همسایگی وجود دارد :
                    آ‌ 1 - همسایگی 8 تایی
                    2- همسایگی 4 تایی
                    همسایگی 8 تایی به صورت
                    (i-1,j-1),(i,j-1),(i+1,j-1),(i-1,j),(i+1,j),(i-1,j+1),(i,j+1),(i+1,j+1)
                    و همسایگی 4 تایی به صورت
                    (i-1,j),(i+1,j),(i,j-1),(i,j+1)

                    4-3. مسیر یا Path
                    2 پیکسل را در یک تصویر باینری در نظر بگیرید . اگر راهی بین این 2 پیکسل از طریق پیکسل هایی که حاوی آبجکت هستند وجود داشته باشد ، به پیکسل های رابط مسیر گفته می شود .


                    4-4. زمینه
                    به مجموعه پیکسل هایی که شامل آبجکت نیستند ، یا مجموعه پیکسل هایی که شامل S بار هستند گفته میشود .

                    4-5. اتصال
                    اگر S مجموع پیکسل هایی باشد که شامل آبجکت هستند پس S(___) شامل پیکسل های بک گراند است . 2 پیکسل p و q که هر 2 متعلق به S هستند متصل به یکدیگرهستند اگر حداقل یک مسیر بین p و q وجود داشته باشد .

                    4-6. مرز تصویر
                    کلیه پیکسل هایی که در اطراف آبجکت قرار گرفته اند .

                    4-7. حفره
                    آ‌ مجموعه ای از S بار که حتی یک پیکسل هم در borderآ‌ نداشته باشد ، حفره نامیده می شود .


                    4-8. هیستوگرام
                    هیستوگرام در واقع همان نمودار میله ای افزونی هر رنگ می باشد .

                    به عنوان مثال تعداد پیکسل هایی که حاوی رنگ شماره 75 هستند 25 عدد است . از هیستوگرام برای آستانه گیری استفاده می شود .

                    4-9. آستانه گیری
                    فرض کنید می خواهید از یک عکس رنگی 16 بیتی یک تصویر سیاه و سفید بسازید . برای این کار باید تک تک پیکسل ها را با مقدار مشخصی مقایسه کنید اگر بزرگتر از آن مقدار مشخص بود به جای آن رنگ سفید و اگر کوچکتر بود به جای آن مقدار سیاه را قرار می دهیم . به این کار آستانه گیری یا threshold می گویند .
                    شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                    هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                    چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                    دیدگاه


                      #11
                      پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

                      خوب ...
                      توو عکس اول پست قبلی،یه چیزه مهم که اکثرا یادم می ره بگم رو میبینین
                      ما محور های مختصاتمون برای y از پایین به بالاست،اما معمولا توو کامپیوتر،اکثر زبانها و کامپایلر ها و ... y رو برعکس می گیرین،یعنی از بالا به پایین ... اما x همونه ...

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

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

                      اصولا ما 2 دسته اطلاعات داریم،بعضی وقتها هر بیتی که داریم برامون مهمه،فرض کنین یک نامه نوشتین،خوب حرف به حرف اون برای ما مهمه،اگه یک بیت جا بجا بشه،نوشته ها عوض میشه،اما پیش میاد مواردی که ما بیشتر از اونی که نیاز داریم،اطلاعات جمع کردیم،یا برای اطلاعات خونه در نظر گرفتیم!!!آ‌فرض کنین میانگین کلی قد دانش آموزهای یک مدرسه برامون مهم باشه،خوب قد تک تک که برامون مهم نیست،پس اگه دیدم قد 200 نفر بین 170 تا 190 سانت اما 4 نفر حدود 150-170 سانت،می تونیم به جای اینکه بازه رو به 150-190 تخضیض بدیم،از قد اینها چشم پوشی کنیم و اونها رو مثلا 170 بدیم و بازه رو بین 170 -190 در نظر بگیریم .... اینجا بخشی از اطلاعات از بین میره اما کلی حجم اون کم میشه ...

                      خوب حالا کلی فشرده سازی هارو برای عکس یه توضیحی بدم :
                      همونطور که گفتم،اول به ازای هر نور اصلی،8 بیت در نظر میگیرن و عکس رو بدست میارن،حالا بیاین فرض کنیم که ما از آشمون عکس گرفتیم که فقط شامل رنگها آبی با شدتهای مختلفه،به ازای هر نور یک بیات یعنی مثلا برای یک عکس 600*800 ما باید 600*800*3 بایت حاقظه در نظر بگیریم،خوب،توو این عکس خواص که من گفتم،کلا مثلا 200 رنگ به کار رفته(شدتها مختلف آبی) اما ما برای هر خونه،16.7 میلیون رنگ در نظر گرفتیم ... خوب،200 رنگ رو میشه توو 8 بایت در نظر گرفت،چون 200 رنگ یعنی 200 حالت!!آ‌ پس ما الان 2 کار می تونیم انجام بدیم،1- بیاین برای هر خونه 3 بایت در نظر بگیریم که راه خیلی حجم چیریه 2- اول بیایم بگیم منظور از 1 یعنی رنگی با این 3 بایت ... بعد به ازای هر خونه 1 بایت در نظر بگیریم،و مثلا بگیم این خونه،رنگ اولیه رو داره!!آ‌ یعنی اینکه الان :
                      200*3 بایت برای رنگها (200 حالت هر کردوم 3 بایتی) + 600*800*1 بایت برای رنگ هر خونه = 480600 بایت
                      توو حالت قبلی :
                      600*800*3=1440000
                      خوب،این یعنی فشرده سازی در حد 1/3!!!آ‌ توو GIF و یکی 2 تای دیگه،یه همچین جیزی استفاده میشه،حتما توو فتوشاپ دیدن که وقتی می خواین gif ذخیره کنین،جدول رنگ باز میشه و ...



                      اما یک موضوع هست که خیلی مهمه،چشم ما تغییراته شدت روشنایی رو خوب درک میکنه،اما تغییر رنگ رئ کمی باید دقت کنه،یک مثال ساده می زنم،فرض کنین عکسی دارین که کسی کاپشن قهوه ای رنگ تیره پوشیده،اگر قسمتی از کاپشن رو با رنگ سبز تیره بپوشونین،توو نگاه اول،ممکنه کسی متوجه نشه،بلکه باید بیاد و از نزدیک ببینه ... اما حالا بیاین فرض کنیم شما توو همون عکس،قسمتی رو با رنگ قهوه ای،اما روشن،بپوشونین،از 1000 کیلومتری داد میزنه :mrgreen: پس جایی مثل اینترنت که نیاز هست عکس خیلی فشرده شه،اما خوب کیفیت خیلی بالای اون کمتر مهمه،میشه این کار رو انجام داد،به جای ذخیره کردن 3 نور اصلی،بیایم و از این 3 عدد سبز و قرمز و آبی،3 عدد دیگه که بعدا بیشتر توضیح می دم رو بدست بیاریم،یکی از اونها،حاوی اطلاعات شدت روشنایی هر نقطه هست!!آ‌ما هم ثابت کردیم که این بایته که مهمه،میان،برای دسته ای از نقاط(مثلا هر 4 نقطه) فقط اطلاعات شدت روشنایی هر نقطه رو صحیح نگه می دارن،و 2 بایت دیگه یکی از این 4 تارو،به ازای هر 4تاشون نگه می دارن .یعنی در حالت اول،ما در هر 4 نقظه،3 بایت داشتیم که میشه :
                      3*4 بایت=12بایت
                      اما الان 4 بایت برای شدت روشنایی هر نقطه+2بایت(مال یکی از این 4 بایت!!)آ‌=6 بایت رو داریم
                      یعنی حجم نصف شد :smile:
                      یک توضیح کوچیک اینکه مثلا توو همون کاپشن قهوه ای که گفتم،اون 2 بایت دیگه،چون اکثر رنگهای خود کاپشن قهوه ای هست،به هم خیلی نزدیکن،یعنی اینکه از هر 4 تا،یکی رو نگه می داریم،چیز خواصی از دست نمی ره،فقط،توو گوشه ها،یعنی جاهایی که تغییر رنگ زیاده،این 2 بایت دیگه میتونه با هم فرق داشته باشه
                      این روش توو مثلا jpg ها به کار میره،خیلی ساده می تونین توو عکسهای jpg توو لبه ها ببینین که اطلاعات رنگ نقاط از بین رفته و نقطه های رنگی نا همگون به وجود اومده ....

                      من این روش و اون 3بایت و ... بعدا توضیح میدم،به جاش ...



                      دیدگاه


                        #12
                        پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

                        سلام
                        دوستان خیلی ممنون از زحماتتون
                        اقا مرتضی و اقا محمد بهتر نیست در مورد شیوه ارائه مطالب با هم متحد بشید این جوری خدائی خیلی بهتره ها

                        ای کاش یه کتاب معرفی می کردید ( یکی بحث تئوری - یکی بحث نرم افزاری )
                        از روی اون ادامه می دادید
                        این جوری قشنگ تر نمیشهآ‌؟؟؟؟ :redface: :nerd:

                        دیدگاه


                          #13
                          پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

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

                          دیدگاه


                            #14
                            پاسخ : پردازش تصویر،از صفر تا هر جا که همکاری کنین ...

                            می دونم این کار وقت می خواهد
                            همین رو که دوستان حوصله می کنند و به زبان آمیانه مطلب می نویسند خودش کلی واسه ما :redface: داره
                            ولی خوب حداقل سرفصلی عنوان مباحث آینده ای کتابی که بچه ها باهاش جلو بیاند
                            اینا که میشه و کار رو اصولی تر و منطم تر جلوه می ده :nerd:

                            دیدگاه


                              #15
                              یک مثال عملی از مباحث گذشته(در مورد هیستوگرام)

                              مثال:
                              می خواهیم یک تصویر رو با متلب باز کنیم اون رو در مقیاس خاکستری ببریم و طیف رنگ های اون رو رسم کنیم (هیستوگرام):
                              اول تصویر را باز میکنیم


                              حالا اون رو به مقیاس خاکستری میبریم:


                              تصویر ما به صورت زیر دیده خواهد شد:


                              حالا رنگ ها بین صفر تا 255 هستن اگه بخواهیم افزونگی هر رنگ رو بدست بیاریم داریم:


                              همونطور که در نمودار نشون داده شده یه رنگ خاکستری که بیشتر به سفید میزنه بیشترین افزونگی رو داره که همون رنگ زمینه هست.
                              موفق باشید.
                              شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                              هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                              چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                              دیدگاه

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