JPEG ที่มีขนาดใหญ่ที่สุดคือ 640x480 คืออะไร


25

ฉันกำลังสร้างอุปกรณ์เก็บข้อมูลที่ใช้เวลาจำนวนหนึ่งของท้องฟ้ายามค่ำคืนในสองสามชั่วโมงและภาพจะถูกดาวน์โหลดทันทีหลังจากถ่ายเสร็จ การ์ดหน่วยความจำจะต้องสามารถจัดเก็บภาพทั้งหมดได้ในครั้งเดียว

JPEG ที่จะถ่ายมีขนาด 640x480 พิกเซลและจำเป็นที่จะต้องมีพื้นที่ในการ์ดหน่วยความจำเพียงพอสำหรับทั้งหมด 100 ภาพ ดังนั้นขนาดที่ใหญ่ที่สุดของ 640x480 JPEG คือเท่าไหร่

ฉันได้ถ่ายรูปเพื่อทดสอบสิ่งนี้:

# 1# 2# 3

  • ขนาดไฟล์ของอิมเมจ "stackoverflow" คือ 73,774 ไบต์
  • ขนาดไฟล์ของภาพสีขาวมีขนาดเพียง 36,607 ไบต์
  • แต่ขนาดไฟล์สำหรับนาฬิการูปตาหมากรุกที่ 149,339 ไบต์

ฉันสมมติว่าขนาดไฟล์เพิ่มขึ้นตามความซับซ้อน

ฉันจะสร้างเนื้อที่ว่างบนการ์ดหน่วยความจำให้พอดีกับ 100 640x480 JPEGS ได้อย่างไรโดยไม่ทราบว่าซับซ้อนขนาดใดและขนาดใด ฉันไม่ต้องการเสียพื้นที่เพิ่มเติมเนื่องจากฉันอาจสร้างอุปกรณ์จับภาพเหล่านี้จำนวนมาก


มันขึ้นอยู่กับผู้สร้างภาพ JPEG คุณภาพสูงสามารถขยายขนาดได้อย่างง่ายดาย การตั้งค่ากล้องและกล้องของคุณคืออะไร?
John Dvorak

กล้องทดสอบคือ Canon Powershot A1100 IS สำหรับข้อมูลเพิ่มเติมคุณสามารถตรวจสอบข้อมูลเมตาได้เนื่องจากฉันไม่แน่ใจว่าคุณขออะไร
บลูไอซ์

1
คุณถ่ายภาพตัวอย่างของท้องฟ้ายามค่ำคืนที่ต่างกันไหม การตั้งค่า Q? เป็นการทดสอบ?
Carl B

2
สิ่งนี้มีไว้เพื่ออะไร? คุณแน่ใจหรือไม่ว่า jpeg เป็นรูปแบบที่ถูกต้อง
Jack Aidley

3
การเพิ่มพื้นหลังให้กับความคิดเห็นของ Jack Aidleys: การบีบอัด JPEG เปลี่ยนรูปภาพ มันทำให้สมมติฐานและทิ้งข้อมูลเพื่อให้ได้ขนาดไฟล์ที่เล็กลง (ยกเว้นตั้งไว้ที่ 100% คุณภาพซึ่งในกรณีนี้คุณอาจใช้รูปแบบที่ไม่มีการบีบอัดเช่นกันบ่อยครั้งที่กล้องดิจิตอลมีการตั้งค่าแบบ tiff หรือแบบดิบหากคุณต้องการเก็บจุดเล็ก ๆ เช่นดาวให้ใช้หนึ่งใน เหล่านี้) นี่จะทำให้ขนาดของรูปภาพสามารถคาดเดาได้อย่างสมบูรณ์
Hennes

คำตอบ:


22

ที่นี่ฉันแนะนำขอบเขตบนสำหรับขนาดไฟล์ JPEG ดูคำตอบของ Ilmari Karonenสำหรับการอภิปรายขนาด jpeg ทั่วไป

พื้นที่จัดเก็บพิกเซลสำหรับรูปภาพ 64 บิต 640X480 บิตสามารถคำนวณได้เช่นนี้ (ตามคำตอบนี้แต่ถูกแก้ไขตามความคิดเห็นของ Ignacio Vazquez-Abrams และคำตอบนี้ ):

สมมติว่าไม่มีการบีบอัดข้อมูลที่นำไปใช้กับไฟล์มี 307,200 พิกเซลซึ่งเป็น 0.3MP ตารางค้นหาที่มีประโยชน์

หากแต่ละพิกเซลมีข้อมูล 32 บิตดังนั้น

  1. 307,200 * 32 = ข้อมูล 9,830,400 บิต
  2. หารด้วย 8 บิตเพื่อเป็นค่าไบต์
  3. 9,830,400 / 8 = 1228800 ไบต์ (หรือ 1.17 Mb)

นี่คือขนาดของบิตแมปที่ไม่มีการบีบอัดและควรเป็นขอบเขตบนสำหรับขนาดไฟล์ jpeg (ในความเป็นจริงเนื่องจากรูปแบบ JPEG ใช้การบีบอัดรูปภาพของคุณควรมีขนาดเล็กลงมากโดยเฉพาะอย่างยิ่งเมื่อคุณถ่ายภาพตอนกลางคืน ท้องฟ้าซึ่งฉันจินตนาการว่ามีสีดำจำนวนมากโปรดทราบว่าภาพตัวอย่างที่ใหญ่ที่สุดในคำถามของคุณคือ 0.14 MB)

เกี่ยวกับปัญหาเฉพาะของคุณอย่างไรก็ตามถึงแม้จะใช้ขอบเขตบนนั้น 100 ภาพมีขนาดเพียง 117 MB และเป็นเวลานานแล้วที่ฉันเห็นการ์ดหน่วยความจำขนาดเล็กเพียง 128 MB ฉันสงสัยว่าการ์ดหน่วยความจำที่มีอยู่ในปัจจุบันจะมีความจุเพียงพอที่จะตอบสนองความต้องการของคุณ

เห็นได้ชัดว่าปัญหาของขนาดไฟล์ jpeg สูงสุดอาจมีการอภิปรายบางอย่าง นี้คำตอบที่กองมากเกินให้เห็นขนาดสูงสุดทางทฤษฎีของ 20.25 ไบต์ต่อพิกเซลหรือ 5.9 ล้านบาทในกรณีของคุณ แต่ผลิตภาพของขนาดที่ต้องใช้ในทางที่ผิดโดยเจตนาของแบบการบีบอัดแบบ JPEG ฯ ดังนั้นจึงไม่น่าเป็นอย่างยิ่งที่คุณเคยเห็นเช่น สิ่งที่ผลิตโดยกล้อง


1
น่าเสียดายที่แม้แต่ค่าบิตแมปที่ไม่มีการบีบอัดก็ยังอยู่ในระดับต่ำเนื่องจากถือว่ามีการบรรจุ บิตแมป unpacked ใช้ 32 บิตต่อพิกเซล (สำหรับเหตุผลการจัดตำแหน่ง ) เพิ่มขนาดไฟล์ 33%
Ignacio Vazquez-Abrams

ขอบคุณ @ IgnacioVazquez-Abrams นั่นคือสิ่งที่ฉันได้รับโดยสมมติว่าคำตอบที่ยอมรับนั้นถูกต้อง
ForeverWintr

1
@ IgnacioVazquez-Abrams - "Alignment" เป็นคุณลักษณะที่ถูกกำหนดโดยตัวประมวลผล (ไม่ใช่สื่อจัดเก็บข้อมูล) และสะดวกเมื่อข้อมูลอยู่ใน RAM สำหรับการประมวลผล สำหรับจุดประสงค์ในการจัดเก็บการจัดตำแหน่งคำแบบ 32 บิตไม่จำเป็นและเป็นความสิ้นเปลืองอย่างแน่นอน ข้อมูลการบรรจุเป็นงานทั่วไปก่อนที่จะเขียนลงในที่จัดเก็บโดยเฉพาะอย่างยิ่งเพื่อการประหยัด 25% ฉันเคยเห็นกล้องดิจิตอลที่เก็บแต่ละพิกเซลใน 3 ไบต์สำหรับรูปแบบดิบ
ขี้เลื่อย

1
"... ความสิ้นเปลืองแน่นอน" ในปัจจุบันนี้ ดวงจันทร์หลายดวงในอดีตเคยเป็นสถานที่ที่ช่วยประหยัดวัฏจักร (ไม่จำเป็นต้องจัดแนวโหลดให้นานเท่าที่จะใช้)
Ignacio Vazquez-Abrams

3
ในทางปฏิบัติในขณะที่บางระบบอาจจัดเก็บข้อมูลภาพ RGB เป็น 4 ไบต์ต่อพิกเซลในหน่วยความจำแต่รูปแบบไฟล์ภาพเกือบทั้งหมดใช้ 3 ไบต์ต่อพิกเซลมากที่สุด ดูคำตอบของฉันด้านล่าง
Ilmari Karonen

35

เพียงเพื่อตรวจสอบให้ฉันทดสอบการวิเคราะห์ของ ForeverWintrทดลอง

ภาพอินพุตที่เลวร้ายที่สุดสำหรับการบีบอัด JPEG (หรือการบีบอัดใด ๆจริง ๆ ) เป็นสัญญาณรบกวน RGB แบบสุ่มอย่างสม่ำเสมอซึ่งไม่สามารถบีบอัดได้ในทางทฤษฎี ดังนั้นให้ฉันสร้างบางอย่างโดยใช้เครื่องมือnetpbm :

$ rawtoppm < /dev/urandom 640 480 > rnd.ppm
$ pnmtopng < rnd.ppm > rnd.png
$ du -b rnd.*
923772  rnd.png
921615  rnd.ppm

สัญญาณรบกวน RGB แบบสุ่มสม่ำเสมอ, รูปแบบ PNG แบบไม่สูญเสีย
(สัญญาณรบกวน RGB สุ่มสม่ำเสมอ, รูปแบบ PNG แบบไม่สูญเสีย, 903 kb)

หมายเหตุ (มีนาคม 2017): ฉันค่อนข้างแน่ใจว่าภาพด้านบนอยู่ในรูปแบบ PNG เมื่อฉันเขียนคำตอบนี้เป็นครั้งแรกและอัปโหลดกลับในปี 2013 (แม้จะมีความคิดเห็นเกี่ยวกับการจัดการสีด้านล่างซึ่งมีความหมายอย่างยิ่ง) ดูเหมือนว่ามันถูกแปลงเป็น JPEG ในบางครั้งทำให้การเปรียบเทียบภาพที่นี่ไร้ประโยชน์

ฉันพยายามที่จะอัปโหลดภาพทดสอบ PNG ใหม่ แต่เห็นได้ชัดว่ามันกระทบขีด จำกัด ขนาดไฟล์ PNG โดยพลการที่ imgur และแปลงเป็น JPEG โดยอัตโนมัติ ฉันไม่แน่ใจว่ามีวิธีแก้ไขปัญหานี้หรือไม่ แต่อย่างน้อยถ้าคุณมีกล่องลีนุกซ์คุณสามารถเรียกใช้คำสั่งที่ให้ไว้อีกครั้งเพื่อสร้างภาพทดสอบของคุณเอง ไม่ว่าในกรณีใดนอกเหนือจากการป้องกันการเปรียบเทียบคุณภาพโดยตรงของการบีบอัดด้วยสายตาโดยตรงนี่ไม่ได้ทำให้การวิเคราะห์ด้านล่างเป็นไปอย่างผิดเพี้ยน

ตกลงดังนั้นไฟล์ PPM ที่ไม่บีบอัดจึงมีความยาว 640 × 480 × 3 = 921,600 ไบต์ยาวบวก 15 ไบต์สำหรับส่วนหัว PPM ขั้นต่ำตามที่คาดไว้ การพยายามบีบอัดแบบไม่สูญเสียข้อมูลโดยใช้รูปแบบ PNG เพียงแค่เพิ่มขนาดโดย 2157 ไบต์อาจใช้ส่วนหัวและข้อมูลเมตาของ PNG และอาจมีประสิทธิภาพเล็กน้อยในอัลกอริทึมการบีบอัดที่พยายามบีบอัดข้อมูลที่บีบอัดไม่ได้

(ใช่นั่นคือ 3 ไบต์ต่อพิกเซลไม่ใช่ 4 แม้แต่รูปแบบ PPM ซึ่งเป็นเรื่องง่ายเหมือนรูปแบบไฟล์กราฟิกสามารถรับได้ไม่โง่พอที่จะเก็บไบต์ที่สี่ที่ไร้ประโยชน์ต่อพิกเซลบนดิสก์อาจมีบางอย่าง ข้อดีในการทำเช่นนั้นในหน่วยความจำสำหรับเหตุผลการจัดตำแหน่งโดยเฉพาะอย่างยิ่งถ้าคุณจำเป็นต้องจัดเก็บช่องอัลฟา แต่ด้วยเหตุผลเหล่านั้นไม่ได้นำไปใช้เมื่อเขียนภาพไปยังไฟล์)

ตกลงดังนั้นแล้ว JPEG ล่ะ ลองลดการสูญเสียการบีบอัดให้สั้นที่สุดก่อน (คุณภาพ = 100, ไม่มีการสุ่มสี Chroma, DCT แบบลอยตัว) น่าเสียดายที่pnmtojpegคู่มือไม่ได้อธิบายอย่างชัดเจนถึงวิธีการตั้งค่าตัวเลือกที่เกี่ยวข้องทั้งหมด (โดยเฉพาะอย่างยิ่ง-sampleตัวเลือกมีการระบุไว้ในส่วน "ตัวเลือกสำหรับพ่อมด" ซึ่งเพิ่งอ้างอิงไฟล์ในเอกสารประกอบ libjpeg) ดังนั้นฉันจะแปลงเป็น GIMP แทน ไฟล์ผลลัพธ์มีลักษณะดังนี้:

897249  rnd.jpg

JPEG เสียง RGB ที่ถูกบีบอัด, คุณภาพ = 100, ไม่มีการสุ่มสีแบบย่อย
(เสียงรบกวน RGB ที่ถูกบีบอัด JPEG, คุณภาพ = 100, ไม่มีการสุ่มสี Chroma, 876 kb)

อะไรมันจะเล็กลงได้อย่างไร ฉันไม่ได้แค่พูดว่าเสียงที่บริสุทธิ์นั้นไม่มีความกดดันหรือ? ดีสิ่งที่เป็นแม้ในที่มีคุณภาพสูงสุด, บีบอัดไฟล์ JPEG ปกติไม่ได้ค่อนข้าง lossless การเปิดภาพอีกครั้งใน GIMP และเปรียบเทียบกับภาพต้นฉบับจะเห็นว่าบางพิกเซลมีค่าสีที่ถูกเลื่อนไปหนึ่งหรือสองขั้นตอน (จาก 256) นั่นคือพิกเซลที่อัลกอริธึมการบีบอัด JPEG "โกง" และโยนทิ้งไปอีกเล็กน้อยที่นี่ซึ่งคาดว่าการเปลี่ยนแปลงนั้นจะไม่สามารถสังเกตเห็นได้ อันที่จริงแล้วสำหรับสายตามนุษย์ที่ไม่ได้พูดถึงผลที่ได้นั้นค่อนข้างแตกต่างจากต้นฉบับ แต่บิตที่ถูกทิ้งเหล่านั้นจะเพิ่มขนาดไฟล์ที่ลดลงซึ่งวัดได้แม้หลังจากการบัญชีสำหรับส่วนหัวและการเข้ารหัสเหนือศีรษะ

นั่นคือคุณภาพสูงสุด สิ่งที่เกี่ยวกับการตั้งค่าทั่วไปเพิ่มเติมเช่นpnmtojpegค่าเริ่มต้น (คุณภาพ = 75 เปิดใช้งานการสุ่มตัวอย่าง) มาลองดูกัน:

$ pnmtojpeg < rnd.ppm > rnd2.jpg
$ du -b rnd2.jpg
185128  rnd2.jpg

JPEG เสียง RGB ที่ถูกบีบอัด, คุณภาพ = 75, การสุ่มสีแบบย่อย
(เสียงรบกวน RGB ที่ถูกบีบอัด JPEG, คุณภาพ = 75, การยกตัวอย่างสี, 184 kb)

ว้าวจาก 901 เหลือ 184 kb! เป็นการบีบอัดที่ค่อนข้างก้าวร้าวและคุณสามารถบอกความแตกต่างได้อย่างแน่นอนเมื่อเปรียบเทียบภาพอย่างใกล้ชิด ส่วนใหญ่เป็นเพราะการย่อยตัวอย่างของ Chroma ซึ่งโดยทั่วไปจะทิ้งข้อมูล 75% ของสี (สี / ความอิ่มตัว) การลองใน GIMP ด้วยการปิดการใช้งานการสุ่มตัวอย่างจะให้ไฟล์ 350,618 ไบต์ที่ยังคงมีลักษณะ (ในสายตามนุษย์อย่างน้อย) สวยใกล้เคียงกับต้นฉบับแม้จะขยาย

อย่างไรก็ตามจุดทั้งหมดนี้คือการแสดงให้เห็นว่าไม่ว่าภาพท้องฟ้ายามค่ำคืนที่มีเสียงดังของคุณอาจจะเป็นและว่าวิธีการที่มีคุณภาพสูงที่คุณอาจเลือกไม่ได้มีเพียงวิธีที่ไม่มีไฟล์ 640 × 480 JPEG สามารถได้รับอย่างมีนัยสำคัญมีขนาดใหญ่กว่า 900 กิโล (ยกเว้นว่ากล้องของคุณจะแนบโพรไฟล์สี Exif หลายเมกะไบต์หรืออะไรที่โง่พอ ๆ กันนั่นก็คือ) และถ้าคุณใช้การตั้งค่าการบีบอัด JPEG ทั่วไปขนาดไฟล์ที่เป็นไปได้สูงสุดจะลดลงประมาณ 200 kb หรือมากกว่านั้น .


4
อัดไม่ผิดในทางทฤษฎีสำหรับการบีบอัดแบบไม่สูญเสียเท่านั้นใช่ไหม?
Daniel Beck

1
@DanielBeck: ถูกต้อง เห็นได้ชัดว่าคุณสามารถบีบอัดข้อมูลได้มากเท่าที่คุณต้องการหากคุณเต็มใจที่จะทิ้งมันไว้ (นั่นคือสิ่งที่การบีบอัด JPEG ทำได้เพียงแค่พยายามทำในลักษณะที่ชิ้นส่วนที่หายไปนั้นไม่สามารถมองเห็นได้ด้วยตาเปล่าและสิ่งที่เหลืออยู่นั้นสามารถเข้ารหัสได้อย่างกะทัดรัดเสียงยังคงเป็นกรณีที่ยากเนื่องจากสิ่งเดียวที่อัลกอริทึมการบีบอัดแบบ lossy สามารถทำได้ด้วยเสียงก็ทิ้งส่วนต่าง ๆ ไป)
Ilmari Karonen

อาจจะเป็นเพียงฉัน แต่ภาพที่สองดูสว่างกว่าภาพแรก
Bogdacutu

@Bogdacutu: ไม่ควรแม้ว่าจะเป็นไปได้เสมอที่เบราว์เซอร์ของคุณอาจทำสิ่งแปลก ๆ ด้วยการจัดการสี ฯลฯ ลองโหลดทั้งสองอย่างในโปรแกรมแก้ไขกราฟิกและเปรียบเทียบค่าสี
Ilmari Karonen

เขียนดี @Ilmari
ForeverWintr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.