سلام دوستان
فکر کنم عنوان کاملا گویاست می خوام یه عکس رو کوچک کنم با تبدیل wavelet چطور باید این کار رو انجام بدم ؟(البته چون داره عکس کوچک میشه کیفیت تغییر نمیکنه)
در صورت امکان با کد راهنمایی کنید.
سلام دوستان
فکر کنم عنوان کاملا گویاست می خوام یه عکس رو کوچک کنم با تبدیل wavelet چطور باید این کار رو انجام بدم ؟(البته چون داره عکس کوچک میشه کیفیت تغییر نمیکنه)
در صورت امکان با کد راهنمایی کنید.
عکس وقتی کوچیک میشه ، کیفیت اون بهتر میشود
public Bitmap ResizeBitmap( Bitmap b, int nWidth, int nHeight )
{
Bitmap result = new Bitmap( nWidth, nHeight );
using( Graphics g = Graphics.FromImage( (Image) result ) )
g.DrawImage( b, 0, 0, nWidth, nHeight );
return result;
}
سلامممنون دوست عزيز از راهنمايتون اما اين كد يك برش از تصوير اصلي رو ميده ولي من مي خوام تصويرم با حفظ جزئيات كوچك بشه. در ضمن اين جواب با تبديل موجك نيست من مي خوام عكسم فشرده سازي بشه با تبديل موجك.
تابع بدون مشکل عمل ریسایز رو روی کل عکس انجام میده و مشکلی نداره.
شاید من بد متوجه شدم.شما میخواهید عکس در همان سایز (اندازه) باشه ولی حجم اون رو کاهش دهید (یعنی می خواهید کامپرس کنید)بدون افت کیفیت؟یا همان ریسایز در رزولیشن بدون افت کیفیت؟
این کد رو امتحان کنید
publicImage resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = newBitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
دوست عزیز
در هر صورت اگه عکس رو کوچک یا بزرگ کنید کیفیت عکس پائین می آید.
نه من نمی خوام حجم رو کاهش بدم. یکم بیشتر توضیح میدم نگاه کن من یک عکس با سایز 100 در 100 پیکسل دارم می خوام این عکس رو به یک ماتریس 10 در 10 پیکسلی تبدیل کنم بدون تغییر در جزئیات یعنی نمی خوام جزئیات از تصویر حذف بشه
میشه بگی این کد با کد دوستمون چه تفاوتی داره؟Marzieh_Aنقل قول: کوچک کردن سایز عکس بدون تغییر کیفیت
این کد رو امتحان کنید
کد:
publicImage resizeImage(Image imgToResize, Size size){int sourceWidth = imgToResize.Width;int sourceHeight = imgToResize.Height;float nPercent = 0;float nPercentW = 0;float nPercentH = 0;nPercentW = ((float)size.Width / (float)sourceWidth);nPercentH = ((float)size.Height / (float)sourceHeight);if (nPercentH < nPercentW)nPercent = nPercentH;elsenPercent = nPercentW;int destWidth = (int)(sourceWidth * nPercent);int destHeight = (int)(sourceHeight * nPercent);Bitmap b = newBitmap(destWidth, destHeight);Graphics g = Graphics.FromImage((Image)b);g.InterpolationMode = InterpolationMode.HighQualityBicubic;g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);g.Dispose();return (Image)b;}
با این راه که من می خوام انجام بدم اگر تصویر کوچک بشه کیفیت بالا میره و همچنان جزئیات در تصویر وجود دارند.behnam25214نقل قول: کوچک کردن سایز عکس بدون تغییر کیفیت
دوست عزیز
در هر صورت اگه عکس رو کوچک یا بزرگ کنید کیفیت عکس پائین می آید.
این دو تا کد با هم فرق دارن.
کدی که جناب man7tomani گذاشتن، دقیقا عرض و طول عکس رو برابر با مقدار داده شده می کته. یعنی کاری به ساختار کلی و شکل اصلی عکس نداره.
اما کدی که من گذاشتم عکس رو با در نظر گرفتن گزینۀ Keep aspect ratio که اکثر برنامه های ویرایش عکس دارند، resize می کنه.
البته بهتره بگم که عمل این خاصیت در resize کردن عکس اینه که عکس ورودی رو با در نظر گرفتن شکل کلی نسبت به size داده شده resize می کنه.
یعنی نسبت ابعاد به هم بعد قبل و بعد از resize شدن عکس مورد نظر، یکی هست.
سلاماین دو تا کد با هم فرق دارن.
کدی که جناب man7tomani گذاشتن، دقیقا عرض و طول عکس رو برابر با مقدار داده شده می کته. یعنی کاری به ساختار کلی و شکل اصلی عکس نداره.
اما کدی که من گذاشتم عکس رو با در نظر گرفتن گزینۀ Keep aspect ratio که اکثر برنامه های ویرایش عکس دارند، resize می کنه.
البته بهتره بگم که عمل این خاصیت در resize کردن عکس اینه که عکس ورودی رو با در نظر گرفتن شکل کلی نسبت به size داده شده resize می کنه.
یعنی نسبت ابعاد به هم بعد قبل و بعد از resize شدن عکس مورد نظر، یکی هست.
من 1 عکس رو با هر دو تابع خروجی گرفتم اما خروجی ها کاملا مثل هم بود و هیچ تفاوتی نداشتند.
جالبه ...
لابد عکس و سایزی که دادید در هر دو تابع با وجود یا بدون وجود خاصیت Keep aspect ratio خروجی یکسان میده!
اما نتایجی که من گرفتم رو ببینید.
عکس اول، عکس اصلی هست.
عکس دوم با تابعی که شما نوشتید عکس رو به سایز با عرض 200 و طول 250 تبدیل می کنه.
عکس سوم با تابعی که من نوشتم و با سایز ورودی عرض 200 و طول 250، عکس رو resize می کنه.
به نظرتون هیچ فرقی تو نتایج نیست؟!!!
آخرین ویرایش به وسیله Marzieh_A : پنج شنبه 26 فروردین 1389 در 00:22 صبح
خوب این کد های که شما ها نوشتید به چه دردی می خوره؟!؟
من الان می خوام استفاده کنم،،،
خوب از این توابع چطوری باید استفاده کرد؟؟؟
اون retern چی رو بر می گردونه؟؟؟
تصویر Resize شده کجا ذخیره می شه؟؟؟؟
نیم اسپیس های مرتبط چی هست؟؟؟
ووو
برای کد زحمت کشیدید ولی چه فایده که کامل نیست؟!
در پردازش تصویر بدرد می خوره. شما فرض کن بخوای یک عکس 200*200 رو پردازش کنی. حالا اگر شما بتونی همین عکس رو در اندازه 50*50 داشته باشی و نتیجه پردازش هم یکی باشه کدوم روش رو انتخاب می کنی ؟خوب این کد های که شما ها نوشتید به چه دردی می خوره؟!؟
در تابع پست 2 شما یک عکس به همراه اندازه جدیدش رو به تابع می فرستی و اون تابع همون عکس رو با اندازه داده شده بهت بر می گردونه .خوب از این توابع چطوری باید استفاده کرد؟؟؟
عکس با اندازه جدید که شما به تابع میدیاون retern چی رو بر می گردونه؟؟؟
یعنی چی کامل نیست .خوب resize می کنه دیگهبرای کد زحمت کشیدید ولی چه فایده که کامل نیست؟!
سلام
چرا GetThumbnail رو امتحان نمی کنید؟
شما می تونی از تبدیل WaveLet هم استفاده کنی که اساس کار Jpeg2000
واقعا از شما ممنونم تو این تاپیک اینقدر گفتم تبدیل wavelet می خوام نه اون چیزی که دوستان قرار دادن زبونم مو در آورد. حالا خواهشا یک توضیح کامل بدید تا علاوه بر من دوستان هم متوجه بشن من دنبال چی بودم.شما می تونی از تبدیل WaveLet هم استفاده کنی که اساس کار Jpeg2000
اول از همه اینکه با تبدیل Wavelet می تونیم هر دو نوع فشره سازی Lossy و Lossless رو انجام بدیم فرق این دو در اینه که با روش دوم اطلاعات اطلاعات اصلی بدون هیچ کم و کاستی قابل بازیابیه مثل کاری که Zip و Rar دارن انجام می دن و در روش اول این اطلاعات اصلی قابل بازیابی نیست یعنی در انجام عملیات معکوس افت داده داریم مثل jpeg وMpg که هر دو شون با DCT پیاده شده (تبدیل کسینوسی گسسته) و البته wavelet هم بیشتر در حالت Lossy بکار میره مثل Jpeg2000 .
برخلاف DCT که توابع پایه ایش بر اساس سینوس و کسینوسه Wavelet به این صورت نیست بلکه از موجک های تشکیل شده با نام wavelets که از خاصیت های اصلی شون محدود بودن و فرکانس متغیرشونو .تئوری wavelet در ابتدا با تئوری MultiResolution شروع شد همین چیزی که جناب asefy2008مطرح فرمودن.
همونطوری که از نام MultiResolution مشخص یعنی آنالیز و نمایش تصویر در Resolution های مختلف.جناب asefy2008 به نکته خوبی اشاره کردن که میخام در ابعاد مختلف پردازش کنم تا عمل پردازش با سرعت بالاتری صورت بگیره یکی از دلایل موردیش می تونه این باشه مثلاً کار کردن با Resolution مختلف مزیت های مهم تری هم می تونه داشته باشه . ممکن یه آبجکت در یک Resolution قابل تشخیص نباشه و با UpSampling(افزایش Resolution) کردن همون تصویر اون آبجکت قابل شناسایی باشه.اگر گذرتون به Ocr ها افتاده باشه اکثرشون برای بدست آوردن یک جواب مطلوب کارشونو در Resolution 300 انجام می دن .به فرض مثال شما تصویری رو با Resolution 100 به ocr بدید ممکن نوشته هایی که با فونت کوچکتر در جریان ف ی ل ت ر شدن بار اطلاعاتی خودشون از دست بدن و زمانیکه برای شبکه عصبی فرستاده میشه جواب مطلوب دریافت نکنید پس تو این فرایند MultiResolution یه فاز حیایتی محسوب میشه . البته قابل ذکر که همیشه اینطوری نیست که Resolution رو افزایش بدیم گاهی اوقات نیاز DownSampling هم انجام بدیم یعنی Resolution به حدی زیاده که Reco Engine ما کارایی شو از دست داده.
از جمله کاربردهایی رایج wavelet تو شاخه پردازش تصویر میشه به Edge Detection (تشخیص لبه) ,Noise Reduction (کاهش نویز)،Steganography (مخفی سازی تصاویر)،Layout Recognition(تشخیص طرح بندی صفحه) و فشرده سازی نام برد.
برای یه تصور شماتیک از MultiResolution یه هرم رو در نظر بگیرید نوک هرم دارای تصویر با پایین ترین کیفیته و در مبداً خودش دارای تصویر با بالاترین کیفیته هر چه این هرم رو به سمت پایین بیاد Resolution تصویر بالا می ره. تصویر مبداً ابعادش به صورت J^2 که در اینجا J معادل با Log2 N .برای رفتن به بالای هرم J رو کاهش بدید .
میشه NameSpace ها و class های و متدهای مربوط به این کار رو هم معرفی کنید؟
چون تو سرچ کردن همیشه اصل مطلب بالا نمیاد و کلی وقت باید در لا به لای مسائل فرعی گشت!
خسته نباشید!!!یعنی چی کامل نیست .خوب resize می کنه دیگه
خوب برادر این که از واضحاته؟!
منظورم اینه که یک نمونه کد کامل بزار؟!
البته من شخصا کارم راه افتاده ، واسه دوستان گفته بودم.
مثل این لینک: (کامل و مرتب ، قابل استفاده)
https://barnamenevis.org/showthread.php?t=228008
این لینک رو ببینید ، شاید مشکلتون حل شه :میشه NameSpace ها و class های و متدهای مربوط به این کار رو هم معرفی کنید؟
چون تو سرچ کردن همیشه اصل مطلب بالا نمیاد و کلی وقت باید در لا به لای مسائل فرعی گشت!
https://barnamenevis.org/showthread.php?t=228008