PDA

View Full Version : درخواست آموزش پردازش تصویر



kitten
دوشنبه 02 اردیبهشت 1387, 19:09 عصر
سلام دوستان کسی هست یه اموزش در مورد پردازش تصویر به من بده (pdf یا حضوری)

mo.esmp
سه شنبه 03 اردیبهشت 1387, 00:55 صبح
کتابهای پردازش تصویر وابسته به هیچ زبان برنامه نویسی نیستند و الگوریتمها و روشهای ریاضی آن بیان شده است.

کتاب Digital Image Processing by Bernd را جستجو کنید.
***

Nima_NF
سه شنبه 03 اردیبهشت 1387, 16:30 عصر
قبل ار ادامه فعالیت لطفا قوانین را مطالعه کنید، فقط گذاشتن لینک مقالات و یا کتاب های رایگان مجاز می باشد.

mahmood3d
سه شنبه 03 اردیبهشت 1387, 19:30 عصر
منم موافقم اگه کسی در مورد پردازش تصویر در c یا ++c چیزی می دونه در این تاپیک قرار بده تا دیگر اعضا (مثل من) هم از تجربیات شما عزیزان استفاده کنیم .

مصطفی ساتکی
سه شنبه 03 اردیبهشت 1387, 23:36 عصر
برای آموزش پردازش تصویر در تهران با شماره 88895504 مرهم رایانه تماس بگیرید. ساتکی

mo.esmp
چهارشنبه 04 اردیبهشت 1387, 00:41 صبح
سلام.
من یکمی پردازش گرافیک کار کردم. در این تاپیک با اجازه مدیران محترم قصد دارم چندتا مثال از پردازش گرافیک رو البته با همکاری دوستان ارایه بدم. امیدوارم که مفید باشه.
خوب اول یکمی در مورد پیکسل حرف بزنیم.
همانطور که میدانید تصویر از نقاط نورانی بنام پیکسل شده است. هر پیکسل نیز از ترکیب 3 رنگ قرمز, سبز و آبی تشکیل شده است که محوده هر رنگ مابین 0 تا 255 است که رنگ سیاه دارای مقدار 0 و رنگ سفید دارای مقدار 255 میباشد. با ترکیب این سه رنگ در مجموع میتوان 16 میلیون رنگ ساخت. هر پیکسل دارای شدت نور است (intensity).

http://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/AdditiveColor.svg/200px-AdditiveColor.svg.png

768 * 1024 شاید با دیدن این ارقام اولین چیزی که به ذهنتون خطور میکنه رزولیشن مونیتور باشه. 1024 در اینجا نشان دهنده تعداد ستونهای پیکسلی و 768 تعداد سطرهای پیکسلی میباشد. توجه کنید جای سطر و ستون در تصویر با ماتریس فرق میکنه یعنی جاشون برعکس هست.

برای اطلاعات کاملتر از به لینکهای زیر مراجعه کنید.


http://en.wikipedia.org/wiki/Pixel
http://en.wikipedia.org/wiki/Intensity_(physics)
http://en.wikipedia.org/wiki/RGB
http://www.mathtools.net/C_C__/Image_Processing/

mo.esmp
چهارشنبه 04 اردیبهشت 1387, 01:10 صبح
در قسمت قبل یکمی با پیکسل آشنا شدیم حالا قصد دارم نحوه خاکستری کردن عکس رنگی رو توضیح بدم. توجه کنید که تصویر خاکستری با تصویر سیاه و سفید فرق میکنه. به عنوان مثال تصویر تلویزیون سیاه و سفید خاکستری هست یعنی صرفا نه سیاه هست نه سفید. خوب اول الگوریتم کار رو توضیح میدم.

الگوریتم:
همانطور که گفتم هر پیکسل از ترکیب 3 رنگ قرمز, سبز و آبی تشکیل شده است. محدوده هر رنگ مابین 0 تا 255 است که رنگ سیاه دارای مقدار 0 و رنگ سفید دارای مقدار 255 میباشد و 128 نشان دهنده رنگ خاکستری میباشد. برای خاکستری کردن عکس باید مقادیر قرمز, سبز و آبی هر پیکسل رو گرفته و اونا رو با هم جمع کنید و بر 3 تقسیم کنید. با جمع مقادیر رنگها و تقیسم اونا بر 3 شما پیکسل رو به محدوده رنگ خاکستری میبرید.


http://img2.freeimagehosting.net/uploads/75d7a5432a.jpghttp://img2.freeimagehosting.net/uploads/5fa1c74b0b.jpg





Bitmap ^picture;
Color orginalColor, resultColor;
picture = gcnew Bitmap(pictureBox->Image);
int intensity;

for (int column = 0; column < picture->Width - 1; column++)
for (int row = 0; row < picture->Height - 1; row++)
{
orginalColor = picture->GetPixel(column, row);
intensity = (orginalColor.R + orginalColor.G + orginalColor.B) / 3;
resultColor = Color::FromArgb(intensity, intensity, intensity);
picture->SetPixel(column, row, resultColor);
}

pictureBox->Image = picture;

mo.esmp
چهارشنبه 04 اردیبهشت 1387, 13:28 عصر
در قسمت قبل در مورد عکس خاکستری صحبت کردیم و گفتیم که با عکس سیاه و سفید فرق داره اما فرقشون چیه ؟ عکس سیاه و سفید یا همون عکس باینری فقط از دو رنگ سیاه و سفید تشکیل شده. به عنوان مثال یک پیام sms رو نگاه کنید, متن نوشته ها به رنگ سیاه هست و پیش زمینه متن سفید هست و هیچ رنگ دیگه ای وجود ندارد.

الگوریتم:
برای تبدیل تصویر به تصویر باینری باید تصویر اول خاکستری شده باشه و بعد باینریش کنید. حالا چرا باید اول خاکستری بشه ؟ در مثال قبل برای خاکستری کردن عکس مقادیر B G R رو با هم جمع و بر 3 تقسیم کردیم. اینکار باعث میشه که هر سه رنگ مقادیر برابر داشته باشن یعنی شدت نورشون با هم برابر بشه. برای خوندن شدت نور هر پیکسل کافیه که یکی از مقادیر R یا G یا B رو بخونیم.
حالا یک مقدار آستانه نیاز داریم. مثلا مقدار 128 نشون دهنده رنگ خاکستری هست. 128 رو به عنوان مقدار آستانه در نظر میگیرم یعنی پیکسلهایی که مقادیرشون از 128 کمتره سیاه بشن و اونایی که مقادیرشون از 128 بیشتره سفید بشن. انتخاب شدت نور آستانه دلخواه هست و شما میتونید هر مقداری رو انتخاب کنید.

http://img2.freeimagehosting.net/uploads/efbed97e5f.gif



Bitmap ^picture;
Color orginalColor, resultColor;
picture = gcnew Bitmap(pictureBox->Image);
int intensity = 128;

for (int column = 0; column < picture->Width - 1; column++)
for (int row = 0; row < picture->Height - 1; row++)
{
orginalColor = picture->GetPixel(column, row);
resultColor = orginalColor.R <= intensity ? Color::Black : Color::White;
picture->SetPixel(column, row, resultColor);
}

pictureBox->Image = picture;

mahmood3d
پنج شنبه 05 اردیبهشت 1387, 09:53 صبح
دوست عزیز اگه میشه نمونه برنامه هایی رو تو c یا cpp بنویس تا تازه کارایی مثل منم کمی با این کار آشنا بشن .

mo.esmp
جمعه 06 اردیبهشت 1387, 01:24 صبح
درحالت نرمال عکس مثبت یا positive است. حالت منفی یا Negative که همون حالت برعکس مثبت عکس هست, رنگها معکوس میشن.

الگوریتم:

برای منفی کردن عکس کافیه که مقدار B G R هر پیکسل رو گرفته و از 255 کم کنیم.

http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Pozytyw_i_negatyw.jpg/180px-Pozytyw_i_negatyw.jpg



Bitmap ^picture;
picture = gcnew Bitmap(pictureBox->Image);

Color orginalColor, resultColor;
int Red, Green, Blue;

for (int column = 0; column < picture->Width - 1; column++)
for (int row = 0; row < picture->Height - 1; row++)
{
orginalColor = picture->GetPixel(column, row);

Red = 255 - orginalColor.R;
Green = 255 - orginalColor.G;
Blue = 255 - orginalColor.B;

resultColor = Color::FromArgb(Red, Green, Blue);

picture->SetPixel(column, row, resultColor);
}
pictureBox->Image = picture;


اینم برنامه همراه با سورس که سه کار قبلی رو بر روی عکس نشون میده که با Visual C++.net 2008 و #C نوشته شده.

C++

http://rapidshare.com/files/110151905/ImageProcessinCPP.rar
#C

http://rapidshare.com/files/110153480/ImageProcessingC_.rar

mehdad.koulab
چهارشنبه 15 خرداد 1387, 20:18 عصر
سلام دوست عزیز mo.esmp اگر برنامه داری که نویز موجود در تصویرو پاک کنه لطفا بذار تو سایت حالا تو این تاپیک یا تاپیک زیر
http://barnamenevis.org/forum/showthread.php?t=108594

mo.esmp
جمعه 17 خرداد 1387, 17:01 عصر
در این قسمت به کاهش نویز تصویر میپردازم. یکی از راههای آسان میانگین گیری از تصویر است.
برای اینکار از یک اپراتور(جدول) 3*3 استفاده میکنیم.
http://img2.freeimagehosting.net/uploads/661d2d1683.jpg
همانند شکل محتویات هر خانه 1/9 هست. از مقادیر این اپراتور برای ضرب در مقادیر پیکسلهای عکس استفاده میکنیم. به رنگ قرمز پیکسل وسطی اپراتور توجه کنید.

حال فرض کنید که یک عکس مطابق شکل با اندازه 6*6 پیکسل داریم.http://img2.freeimagehosting.net/uploads/3345d749c9.jpg

حال اپراتور را بر روی عکس منطبق میکنیم یعنی مقادیر 9 پیکسل اول عکس را در 1/9 ضرب میکنیم( پیکسلهای 110, 25, 45, 98, 21, 10, 78, 211, 10) سپس حاصل آنها را با هم جمع مکینیم و در پیکسل شماره 1,1 یعنی 21 جمع مکینم(همان خانه قرمز اپراتور).
http://img2.freeimagehosting.net/uploads/14d1524397.jpg

سپس اپراتور را یک واحد به سمت راست شفیت میدهیم و دوباره عمل بالا را تکرا مکینیم تا اینکه این عمل بر روی تمام پیکسلهای عکس انجام گیرد.

برای هر چه کمتر کردن نویز میتوانید از اپراتورهای بزرگتری به اندازه 4*4 که اندازه هر خانه آن 1/16 یا اپراتور 5*5 که اندازه هر خانه آن 1/25 استفاده کنید.



Color resultColor;
int intensity, sum;

for (int x = 0; x < picture1->Width - 2; x++)
for (int y = 0; y < picture1->Height - 2; y++)
{
sum = 0;
for (int i = x; i < x + 3; i++)
for (int j = y; j < y + 3; j++)
sum += picture->GetPixel(i, j).R;

intensity = sum / 9;

resultColor = Color::FromArgb(intensity, intensity, intensity);
picture1->SetPixel(x + 1, y + 1, resultColor);
}C++ Source

http://www.box.net/shared/fn54tz1cgwC# Source

http://www.box.net/shared/4eczo274kccoding in vs2008