# اخبار و اعلانات > گفتگوی عمومی کامپیوتر و فناوری اطلاعات >  علت تفاوت حجم های دو عکس با اندازه های برابر چیست؟

## alireza es

با عرض سلام .دو عکس مختف دارم.سایز هردوشون 1360 * 768 هست.فرمت هردو jpg هست.
ولی حجم یکی 2 مگ و دیگر 5 مگ هست!میدونم به نظر خیلی طبیعی میاد ولی علت فنیه اینکه دو عکس تفاوت حجم دارن چیه؟با اینکه تعداد پیکسل هاشون برابره مگه عکس فقط مجموعه ای از پیسکل ها نیست؟
ممنون میشم کسی به این سوال مبتدیانه من جواب بده
 :لبخند گشاده!:

----------


## eshpilen

بخاطر اینکه الگوریتم فشرده سازی هر دیتا با هر الگویی رو به یک مقدار متفاوت میتونه فشرده کنه.

یه مثال انتزاعی میزنم.
فرض کنید عبارت 18573623140 رو چطور و چقدر میشه فشرده کرد؟ منظورم همینطوری ذهنی یه روش از خودت.
هرچقدر فکر و تلاش کنید، میبینید که یافتن الگوی خاص و مقادیر تکراری در این رشته دشواره و نهایت به زور میشه فقط تا حد کمی اون رو فشرده کرد.
اما حالا اگر بجاش بذاریم 44444444444، چطور و چقدر میشه فشرده کرد؟ طبیعی هست که شما میتونید بجای نوشتن 11 تا 4 پشت سرهم بنویسید 11تا4 و به این شکل میبینید که رشته رو به میزان قبال توجهی فشرده کردید.

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

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

یعنی بستگی به این داره که خود محتوا هم چی باشه! چه مقادیری درش باشن. بشه یا نشه چه روابطی بینشون برقرار کرد.

البته درمورد الگوریتم هایی مثل jpeg به تنظیم کیفیت اونا هم توجه داشته باشید. شاید یکی از عکسها با تنظیم کیفیت بالاتری فشرده شده.
الگوریتم فشرده سازی فرمتهایی مثل jpeg به اصطلاح از نوع Lossy است. یعنی برای دستیابی به فشرده سازی بیشتر میاد و خودش یکسری تغییرات محدودی در مقادیر پیکسل ها ایجاد میکنه (قاعدتا بر اساس الگوریتم خودش تشخیص میده که در کجا چقدر و چطور تغییر ایجاد کنه که کمتر در چشم انسان مشخص باشه) تا ضریب فشرده سازی بتونه بیشتر باشه. طبیعتا در این فرایند مقداری از دیتای اورجینال و دقیق تصویر و تاحدودی کیفیت تصویر از بین میره، بخاطر همین بهش میگن فشرده سازی Lossy. شما با تنظیم کردن کیفیت تصویر روی مقدار بیشتر وقتی میخواید تصویر اورجینال رو به فرمت jpeg ذخیره/تبدیل کنید، میتونید مقدار این از دست دادن اطلاعات رو که ممکنه با پایین اومدن مشهود کیفیت بصری هم همراه باشه کاهش بدید (شاید اگر تنظیم کیفیت رو روی 100% بذارید، دیگه اصلا اون الگوریتم دستکاری اعمال نشه، ولی مطمئن نیستم).

خیلی از فرمتهای تصویری، ویدئویی، و صوتی از همین روشهای فشرده سازی Lossy استفاده میکنن که میتونن به ضریب فشرده سازی بالایی دست پیدا کنن. ولی در بعضی کاربردها و جاها هم هست که این ویژگی مطلوب نیست یا اصلا نباید صورت بگیره و به همین دلیل از فرمتها/فشرده سازی های Lossless استفاده میشه. یک فرمت تصویری Lossless معروف، فرمت PNG است.

----------


## eshpilen

با همین سایز 1360 * 768 از یک دیوار سفید یکدست عکس بگیر، بعد ببین در فرمت jpg چقدر حجم داره!
من این کار رو تاحالا انجام ندادم، اما بنظرم حجمش خیلی کمتر میشه.
چرا؟ چون عملا در عکس شما اطلاعات چندانی وجود نداره. تقریبا تمام حجم عکس یکسری پیکسل های با مقدار مشابه هستن که میتونن با میزان اطلاعات بسیار کمی بیان/فشرده بشن.
البته دیوارش کاملا صاف باشه و یکدست  :لبخند گشاده!: 
بعدم تنظیم کیفیت رو اول روی 100% نذار. بعدا میتونی با تنظیم کیفیت 100% موقع تبدیل به jpg هم تست کنی ببینی چه فرقی میکنه. بستگی به حساسیت دوربین و مشخصات دیگر موقع عکس برداری، ممکنه حجمش خیلی تغییر بکنه یا نکنه.
میتونی حتی با نرم افزار paint ویندوز هم خودت شخصا تصاویری ایجاد کنی و تست کنی. من قبلا این تستها رو انجام دادم.
میزان فشرده شدن بسته به میزان اطلاعات متفاوت موجود در فایل داره. آنتروپی اطلاعات.
اینکه بتونی هر چیزی رو با چه میزان حداقل اطلاعاتی بیان کنی، میشه قابلیت فشرده سازیش.
شما میتونی هزارتا کاراکتر A تایپ کنی، میتونی بجاش بنویسی «1000 تا A». این یک ضریب فشرده سازی بسیار زیاد داره.
ولی وقتی مثلا اون هزارتا کاراکتر متفاوت و رندوم باشن (آنتروپی بالا)، ضریب فشرده سازی خیلی کمتر میشه و حتی میتونه عملا به صفر برسه.

----------


## SlowCode

> با همین سایز 1360 * 768 از یک دیوار سفید یکدست عکس بگیر، بعد ببین در فرمت jpg چقدر حجم داره!
> من این کار رو تاحالا انجام ندادم، اما بنظرم حجمش خیلی کمتر میشه.


اگه رنگ ها به سیاه نزدیک تر باشن حجمشون کمتر میشه، مثلا حجم عکس دیوار سیاه از دیوار سفید کمتره.
چرا؟
چون تو سیستم rgb عدد 0 سیاه هست و 255 سفید. بدیهیه که حجم 0 از 255 کمتره.
شما اگه یه فایل عکس رو به صورت باینری باز کنی و بخونی میبینی که مقادیر به صورت Byte ذخیره میشن(0 تا 255)
پس فراوانی رنگ هم روی حجم تاثیر داره.

----------


## eshpilen

منکه الان تست کردم اینطور نبود!
با paint چندتا تصویر خالی با رنگهای زمینهء مختلف اما با سایز یکسان ایجاد کردم و با پسوند jpg ذخیره کردم، حجم تصویر با رنگ سفید با تصویر با رنگ سیاه دقیقا یکسان بود. البته رنگهای دیگر هم تست کردم که رنگهای دیگر حجمشون از سفید و سیاه کمی کمتر هم بود (ولی همشون یک سایز یکسان داشتن).




> مثلا حجم عکس دیوار سیاه از دیوار سفید کمتره.


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

----------


## eshpilen

خب علتش چیه؟
من فکر نمیکنم که الگوریتم فشرده سازی تصویر بیاد و در سطح بیت هم فشرده سازی کنه.
اگر یک تصویر بیشترش از یک مقدار بایتی تشکیل شده باشه، مثلا کل تصویر سیاه باشه، دیگه فرق چندانی میان چند بیت و بایت کمتر و بیشتر وجود نداره و همون مقدار فشرده سازی هم کفایت میکنه. یعنی چه ما بگیم مثلا «هزار تا سیاه»، چه بگیم «هزارتا س» از نظر حجمی فرق زیادی نمیکنه. مهم و عمدهء فشرده سازی توی اون عبارت «هزارتا» است که میتونیم بجای هزاربار تکرار یک چیزی بکار ببریم.
اگر هم بیشتر تصویر از یک مقدار بایتی کاملا یکسان تشکیل نشده باشه بازهم فکر نمیکنم این مزیت چندانی داشته باشه.
ضمنا کد رنگها هم حتما از قبل به صورتی که هم بقدر کافی بهینه و کم حجم باشه و هم بقدر کافی ساده و روشن باشه و الگوریتم رو بیش از حد پیچیده نکنه طراحی شدن.
افراط و وسواس در هرچیزی خوب نیست. در بهینه سازی، در فشرده سازی. ما فقط یک پارامتر نداریم. پارامترهای دیگری هم هستن. سادگی، پرفورمنس، انعطاف، خوانایی، گسترش پذیری، قابلیت نگهداری و غیره. باید یک تعادل بهینه بین تمام پارامترها برقرار باشه، چون هرکدام میتونن روی یکسری پارامتر دیگر تاثیر منفی یا مثبت بذارن.

----------


## syntiberium

> بدیهیه که حجم 0 از 255 کمتره.


چقدر واقعا الان اطلاعاتم زیاد شد  :قهقهه: . من قبلا فکر می کردم هر دوتا شون 8 بیت اشغال می کنند .

وقتی چند تا بایت پشت سر هم مقدارشون به هم نزدیک باشه می شه تعداد بیت کمتری واسشون در نظر گرفت و اینکه چرا jpg خیلی بیشتر فشرده می کنه چون r ها و b ها و g ها رو جداگونه با هم مقایسه می کنه و اگر هنگام ذخیره کیفیت رو پایین بیاریم تعداد پیکسل ها رو کم نمی کنه در واقع یک سری اطلاعات که از نظر الگوریتمش خیلی مهم نیست رو حذف می کنه و بخاطر همین به نسبت عکس اصلی یک مقدار نویز بهش اضافه می شه .

----------


## alireza es

ببخشید فرمت خام نداریم؟یعنی فرمتی که فشرده سازی نکنه؟یا حداقل فرمتی که کیفیت رو فدای فشرده سازی نکنه(مثل jpg نباشه)

----------


## syntiberium

> ببخشید فرمت خام نداریم؟یعنی فرمتی که فشرده سازی نکنه؟یا حداقل فرمتی که کیفیت رو فدای فشرده سازی نکنه(مثل jpg نباشه)


 bmp فشرده نمی کنه. png فشرده می کنه بدون کاهش کیفیت و توی وب هم معمولا bmp نمی شه upload کرد ولی png می شه .

----------


## Vitallity

DPI(Dot per inch) اون عکسی که حجمش بیشتره می‌تونه ببیشتر باشه یعنی به ازای هر نقطه اطلاعات بیشتری در فایل ذخیره شده. تعداد رنگ در color pallet ذخیره شده در عکس هم می‌تونه تاثیر گذار باشه مثلاً تو فوتوشاپ از گزینه Image بخش Posterize رو انتخاب کن و مقدار اون رو کم کن. این کار باعث میشه حجم عکست بیاد پایین...

----------


## eshpilen

> DPI(Dot per inch) اون عکسی که حجمش بیشتره می‌تونه ببیشتر باشه یعنی به ازای هر نقطه اطلاعات بیشتری در فایل ذخیره شده.


 در کامپیوتر هر نقطه اگر منظورتون پیکسل هست، اطلاعات ذخیره شده برای هر پیکسل در هر فرمت و نوع خاصی ثابته و ربطی به DPI نداره.
DPI یه چیزی هست مربوط به روزولیشن اسکن و سایز واقعی (فیزیکی).
مثلا ‎72 DPI یعنی به ازای هر اینچ 72 پیکسل در عکس وجود داره.
حالا فرض کنید سایز شیء واقعی شما که ازش عکس گرفتید یا اسکن کردید، 4 در 5 اینچ بوده.
خب طول و عرض این تصویر حاصل شده چند پیکسل خواهد بود؟
5*72 و 4*72 پیکسل.
اگر با ‎300 DPI اسکن میکردید، طبیعتا سایز تصویر بدست آمده چند برابر میشد: 4*300 در 5*300 پیکسل.

پس اینطور نیست که دوتا عکس دقیقا یک فرمت و یک سایز (برحسب پیکسل) داشته باشن، اما یکیش به ازای هر نقطه محتوی اطلاعات بیشتری باشه. البته اگر منظور از نقطه پیکسل باشه. وگرنه بله ممکنه هر دو عکس مثلا 200*100 پیکسل باشن، ولی سایز شیء واقعی یکی 1*2 اینچ بوده و دیگری 10*20 اینچ. طبیعتا چون مورد اول سایز فیزیکی کمتری داشته، اسکنر یا هر منبع دیگری که اون تصویر رو تولید کرده در هر اینچ تعداد پیکسل های بیشتری رو دیده/قرار داده و تصویر با اینکه از نظر فیزیکی (ابعاد واقعی که بوده) کوچکتره اما دقت خیلی بیشتری داره چون به ازای هر اینچ پیکسل های بیشتری بهش تعلق گرفته. اما این در نهایت به تفاوت حجم عکس ها با فرمت و تعداد پیکسل یکسان ارتباطی پیدا نمیکنه. تفاوت بخاطر ضریب فشرده سازی و مشخصات دیگر دیتای خود تصویره (و دیگر پارامترهای احتمالی مثل فشرده سازی پالت رنگ و غیره) و در هر دو تصویر به ازای هر پیکسل اطلاعات یکسانی وجود داره.

----------


## aminjooon2005

با عرض سلام
تصویر ماتریسی است از پیکسل ها و اگر بدون فشرده سازی درصدد ذخیره سازی آن باشیم باید برای هر پیکسل مقدار مشخصی از اطلاعات (مثلا 8 بیت برای عکس های سیاه سفید / 24 بیت برای عکس های رنگی/ البته بدون درنظر گرفتن شدت رنگ )  را دخیره کنیم اما در عمل در  ذخیره سازی تصویر  تصویر معمولا به بلوک های 8در8 شکسته میشود روی هر بلوک یک عملیات (معمولا تبدیل dct ) انجام می شود هر چه این تبدیل مناسب تر باشد ( اصطلاحا enery compaction   بهتری ارائه دهد ) حجم تصویر کاهش بیشتری خواهد داشت

----------


## سوداگر

یه احتمال دیگه هم اینه که واقعا دوتا فایل یکی باشند! ولی یک فایل 3 مگابایتی توی اون یکی مخفی شده باشه (فقط احتماله!)  گوگل

----------


## مصطفی ساتکی

> با عرض سلام .دو عکس مختف دارم.سایز هردوشون 1360 * 768 هست.فرمت هردو jpg هست.
> ولی حجم یکی 2 مگ و دیگر 5 مگ هست!میدونم به نظر خیلی طبیعی میاد ولی علت فنیه اینکه دو عکس تفاوت حجم دارن چیه؟با اینکه تعداد پیکسل هاشون برابره مگه عکس فقط مجموعه ای از پیسکل ها نیست؟
> ممنون میشم کسی به این سوال مبتدیانه من جواب بده


ابعاد اینجا مسئله نیست مهم اینه که از چه میزان codebook ی برای quantization توی jpg استفاده شده باشه تصویر به بلوک های 8*8 تقسیم میشه سپس با تبدیل کسینوسی ضرایب براش در میاد و سپس ضرایب را quantize  می کنه و بعد هم از روش rle برای فشرده سازی ضرایب quantize شده استفاده می کنه

----------


## shahin bahari

> ببخشید فرمت خام نداریم؟یعنی فرمتی که فشرده سازی نکنه؟یا حداقل فرمتی که کیفیت رو فدای فشرده سازی نکنه(مثل jpg نباشه)


 فکر میکنم فرمت .raw  چیزی هست که شما دنبالشید. خیلی از دوربین های حرفه ای با این فرمت ذخیره میکنند که بعدا هر بلایی خواستید سرش بیارید.

----------


## Vitallity

> در کامپیوتر هر نقطه اگر منظورتون پیکسل هست، اطلاعات ذخیره شده برای هر پیکسل در هر فرمت و نوع خاصی ثابته و ربطی به DPI نداره.


 دوست عزیز، کاملاً مطمئن هستم که مفهوم (DPI) نقطه به ازای اینچ با پیکسل فرق می‌کنه. تا حالا شده یه عکس کوچیک رو تو مانیتورت ماکسیمایز کنی؟ چه اتفاقی میفته؟  اطلاعات تعداد پیکسل‌هایی که بیشتر داره نمایش داده می‌شه از کجا میاد؟ هر نقطه می‌تونه در برگیرنده یه تناسب ریاضی از یه تعداد مشخص پیکسل باشه.
Dot per inch:
http://en.wikipedia.org/wiki/Dots_per_inch
Pixel per inch: 
http://en.wikipedia.org/wiki/Pixels_per_inch

درباره فرمت هم باید بگم به صورت کلی 2 نوع فرمت داریم lossy و lossless
lossy : معنی این کلمه یعنی کاهشی یا از دست دادنی ... که یک نوع حالت فشره سازی فایل(فیلم، عکس، صدا و ...) هست تو این حالت فشرده سازی با هربار ذخیره سازی ازکیفیت عکس کاسته می‌شه . فرمت jpg یک نوع فرمت ذخیره سازی lossy  هست. در مقابل فرمت lossless رو داریم که فشرده سازی رو به طریقی انجام می‌ده که هیچ اطلاعاتی با هربار ذخیره سازی از بین نمی‌ره.

----------


## eshpilen

> تا حالا شده یه عکس کوچیک رو تو مانیتورت ماکسیمایز کنی؟ چه اتفاقی میفته؟   اطلاعات تعداد پیکسل‌هایی که بیشتر داره نمایش داده می‌شه از کجا میاد؟


پیکسل ها بصورت نرم افزاری محاسبه/تولید میشن.
شما یک عکس 100*100 پیکسلی رو هم میتونی هر اندازه بزرگ کنی/با پیکسل های بیشتری نشون بدی؛ صرفنظر از اینکه کیفیتش پایین میاد (البته درمورد تصاویر SVG کاهش کیفیت رو نداریم).
پیکسل های بیشتری که برای پر کردن صفحه لازم باشن، یعنی درحدی که از پیکسل های خود تصویر بیشتر باشه، بصورت نرم افزاری محاسبه و تولید میشن.




> هر نقطه می‌تونه در برگیرنده یه تناسب ریاضی از یه تعداد مشخص پیکسل باشه.


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

خواستی بیشتر روشنش میکنیم. فقط روشن و دقیق صحبت کن که بفهمم چی میگی.

----------


## شیداااا

وقتی یک بردار با بعد بالاتر مثل n*1 را به بعد پایین تر مثل  m*1 که  m کوچکتر از n ,کاهش بعد می دیم لزوما اطلاعات رو کم نکردیم. برای مقایسه تعداد بیت لازم برای نمایش بردار n*1 را با تعداد بیت نمایش بردارm*1  در نظر بگیر. kolmogrov Entropyبه این مقایسه کمک میکنه. موفق باشید.

----------


## behnam404

تراکم رنگ
البته خیلی از دوستان در ابتدا پاسخ دادند باتوجه به پاسخ کاربر eshpilen که در ابتدا فرمودند الگوریتم های به کار رفته نیز تاثیر در حجم ذخیره شدن مقدار پیکسل ها و در کل حجم عکس دارند اما در کل تعداد رنگ های به کار رفته در عکس تاثیر مستقیم بر حجم عکس داره و تفاوت دو عکس در تراکم رنگ اون ها میتونه باشه.
میتونید یه عکس با سایز مشخص از منظره ای بگیرید و عکس دیگه ای رو با همون سایز توسط paint اما  سر تا سر یک رنگ مثلا سفید یا مشکی ایجاد کنید و با همون فرمت ذخیره کنید میتونید تفاوت حجم رو خودتون مشاهده کنید  البته این در PNG محسوس تره

----------

