อะไรคือสิ่งที่ jpeg และสิ่งที่สามารถทำได้เกี่ยวกับพวกเขา?


25

ฉันรู้ว่า JPEG เป็นอัลกอริทึมการบีบอัด "สูญเสีย" ที่ทิ้งข้อมูลเพื่อประหยัดพื้นที่ อะไรคือผลกระทบต่อภาพของสิ่งนี้? ฉันเคยได้ยินเรื่อง "สิ่งประดิษฐ์ JPEG" สิ่งเหล่านี้มีลักษณะอย่างไร

มีสถานการณ์ที่การบีบอัดในระดับเดียวกันสร้างสิ่งประดิษฐ์มากขึ้นและดูแย่ลงหรือไม่? เนื้อหาของภาพมีความสำคัญหรือไม่? อัลกอริทึมจัดการกับอะไรได้ดีและมีปัญหาอะไร?

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


มีคำตอบบางส่วนสำหรับคำถามนี้ที่นี่: photo.stackexchange.com/questions/5317/…
dpollitt

ขอบคุณ @dolloll ฉันไม่เห็นสิ่งนั้นเนื่องจากการสะกดคำแบบอังกฤษและการขาดแท็ก นอกจากนี้ยังเป็นเรื่องเกี่ยวกับความละเอียดต่ำและขนาดไฟล์ต่ำโดยเฉพาะ
mattdm

ฉันชอบที่จะดูตัวอย่างระดับพิกเซล (หรือใหญ่กว่า) ในคำตอบ
mattdm

1
ฉันจะนำคุณไปยังคำตอบของฉันในหัวข้อ @dpollit ที่เชื่อมโยงมาก่อนโดยเฉพาะเว็บไซต์ที่เชื่อมโยงจากมันซึ่งมีภาพตัวอย่างทั้งหมดจากระดับ "คุณภาพ" ที่สำคัญทุกประเภทพร้อมรายละเอียดระดับพิกเซลสำหรับประเภทต่างๆ ของภาพ
jrista

1
@BBking - ฉันชอบที่จะเห็นคำตอบอย่างละเอียดเกี่ยวกับเรื่องนี้พร้อมการอ้างอิง
mattdm

คำตอบ:


19

ตัวอย่าง

ใช้ภาพปัจจุบันของภาพสัปดาห์ นี่คือ JPEG คุณภาพสูง:

gimp Q = 99

บันทึกใหม่ใน Gimp ด้วยคุณภาพ JPEG 80 (ต่ำ); โปรดทราบการสูญเสียความคมชัดโดยทั่วไป "จุด" รอบขอบความเปรียบต่างสูงการสูญเสียรายละเอียดในพื้นที่ที่มีความเข้มต่ำ:

gimp Q = 80

และบันทึกอีกครั้งใน GIMP ด้วยคุณภาพ JPEG 30 (ต่ำมาก); โปรดทราบบล็อก 8x8 ชัดเจนและการสูญเสียความคมชัดและสีอย่างรุนแรง

gimp Q = 30

สามชนิดของการบิดเบือน

JPEG มีแนวโน้มที่จะแนะนำการบิดเบือนสองสามชนิด:

  • การสูญเสียความคมชัดและการสั่นทั่วไปรอบขอบความเปรียบต่างสูง: สิ่งเหล่านี้เกิดจากการประมาณความเข้มของการเปลี่ยนผ่านที่มีฟังก์ชั่นที่ราบรื่น (โคไซน์); คุณเห็นว่ามันเป็น "จุด" เล็ก ๆ หรือ "รัศมี" รอบขอบ มันง่ายมากที่จะเห็นในภาพข้อความของภาพวาดด้วยมือ
  • โครงสร้างการปิดกั้น: ภาพจะถูกประมวลผลแยกกันสำหรับบล็อก 8x8 ทุกอัน (หรือใหญ่กว่าในกรณีที่มีการสุ่มตัวอย่างลดลงของสี) ขอบของบล็อกจะปรากฏที่อัตราส่วนการบีบอัดสูง
  • การสูญเสียรายละเอียดสี: มันขึ้นอยู่กับการบันทึกพารามิเตอร์โปรแกรมอาจ "ลดตัวอย่าง" (ลดความละเอียด) ช่องทางสี มันไม่ค่อยมีปัญหาสำหรับการถ่ายภาพตามธรรมชาติ

โครงสร้างบล็อกที่มองเห็นและรัศมีรอบ ๆ ขอบมักจะถูกอ้างถึงเป็นสิ่งประดิษฐ์ JPEG ลองซูมตัวอย่างของเราดูดีกว่า จากซ้ายไปขวาครอบตัดจากรูปภาพต้นฉบับ JPEG Q80 และ JPEG Q30 ฉันทำเครื่องหมายสิ่งประดิษฐ์เป็นสีเขียว (วงกลมสำหรับรัศมีและจุดสำหรับบล็อก 8x8):

เปรียบเทียบสามทาง

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

โฮสติ้งกลยุทธ์

หากคุณควบคุมพารามิเตอร์การบีบอัด JPEG และต้องการเพิ่มคุณภาพของภาพ:

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

หากคุณอัปโหลดไปยังบริการบุคคลที่สามและไม่ควบคุมพารามิเตอร์การบีบอัดคุณไม่สามารถทำอะไรได้มาก:

  • เลือกบริการที่ทราบว่าต้องการ JPEG คุณภาพสูง (Flickr, SmugMug, 23hq, 500px) มากกว่าบริการที่ทราบกันดีว่าการบีบอัดข้อมูลมากเกินไปเพื่อประหยัดการรับส่งข้อมูล (Picasa, Imgur, Dropbox); โดยปกติคุณจะได้รับสิ่งที่คุณจ่ายไป
  • ลองปรับขนาดรูปภาพด้วยตัวเองและอัปโหลดขนาดที่เหมาะสม (บริการบางอย่างจะบีบอัดใหม่อีกต่อไปบางบริการอาจแสดงไฟล์ของคุณเมื่ออัปโหลด)

16

JPEG ใช้การบีบอัดสองประเภทจริง ๆ คือแบบ lossly และ lossless การบีบอัดแบบไม่สูญเสียไม่ก่อให้เกิดสิ่งประดิษฐ์ดังนั้นเราจึงสามารถข้ามส่วนนั้นไปได้ การบีบอัดแบบ lossy ในรูปแบบเฉพาะที่เรียกว่าการแปลงโคไซน์แบบไม่ต่อเนื่องสำหรับ knurds ทางคณิตศาสตร์ช่วยให้มีการแลกเปลี่ยนระหว่างอัตราส่วนการบีบอัดและความเที่ยงตรง ซอฟต์แวร์ส่วนใหญ่ใช้แทนค่านี้ "คุณภาพ" โดยปกติจะอยู่ในระดับ 0-100 โดยที่ 100 จะไม่มีการสูญเสียอย่างมีประสิทธิภาพหรือน้อยมาก

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

นี่คือภูมิภาค 200 x 300 ของภาพถ่ายขนาดใหญ่ที่มีพิกเซลที่จำลองแบบ 2x เพื่อให้ดูได้ดียิ่งขึ้น JPEG ที่ใช้การบีบอัด "คุณภาพ" นี้ 100:

คุณภาพ 80, ลดขนาดไฟล์ 79%:

คุณภาพลด 60, 86%:

คุณภาพลด 40, 90%:

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

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

คุณสามารถดูสิ่งที่บีบอัดได้แย่ลงเรื่อย ๆ ตามอัตราส่วนการบีบอัดที่สูงขึ้น โปรดทราบว่ารูปภาพด้านล่างยังคงมีข้อมูลภาพจำนวนมากซึ่งน่าจะมีการลบข้อมูลดิบ 9 / 10th

ประเภทของสิ่งประดิษฐ์ที่มีลักษณะของการบีบอัดแบบ JPEG ที่สูญเสียไปคือ "blockiness" ในการเปลี่ยนพื้นที่ราบและ "ดิน" รอบขอบความเปรียบต่างสูง ตัวอย่างเช่นดูพื้นที่ด้านล่างขวาในภาพด้านบน ที่มีพื้นหลังไม่ได้โฟกัสดังนั้นค่าจะเปลี่ยนอย่างช้าๆ การปิดกั้นค่อนข้างชัดเจน สำหรับตัวอย่างของ "ดิน" ให้มองไปที่เขาซ้ายของแพะ สิ่งประดิษฐ์ทั้งสองประเภทนี้มักจะเป็นเบาะแสที่ดีว่าการบีบอัด JPEG ได้รับการปรับปรุง มองหาสิ่งเหล่านี้ในภาพอื่น ๆ ข้างต้นเพื่อให้เข้าใจถึงสิ่งที่ดูเหมือนเมื่อเริ่มปรากฏและอัตราส่วนการบีบอัดที่คุณอาจทนในสถานการณ์ต่าง ๆ


1
การสูญเสียที่มองเห็นไม่ได้มาจากตัว DCT เอง แต่มาจากการหาค่าสัมประสิทธิ์ควอนตัมของ DCT หลังจากการแปลง
Sarge Borsch

10

การบีบอัด JPG ทำได้ในหน่วยพิกเซล ในภาพ JPG ที่มีการบีบอัดสูงขอบของบล็อกเหล่านั้นสามารถมองเห็นได้: ในภาพดั้งเดิมสองพิกเซลอาจมีความสว่างและสีใกล้เคียงกันมาก แต่ถ้าอยู่ในบล็อกที่แตกต่างกันจากนั้นหลังจากการบีบอัดและคลายการบีบอัด ค่าของมันอาจแตกต่างจากของจริงดังนั้นคุณจึงสูญเสียการผสมแบบค่อยเป็นค่อยไปและเริ่มเห็น "blockiness" นี้

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือตัวอย่างทั่วไปในท้องฟ้า - JPG บันทึกที่คุณภาพ 0

หากคุณอัปโหลดไปยังไซต์ที่ใช้การบีบอัด JPG คุณอาจได้ผลลัพธ์ที่ดีกว่าโดยทำสองสิ่ง (คุณจะต้องทดลองกับไซต์เพื่อดูว่าใช้งานได้):

  • ปรับขนาดของภาพให้อยู่ในระดับความสูง / ความกว้างสูงสุดที่เว็บไซต์อนุญาตดังนั้นเว็บไซต์จะไม่ปรับขนาดภาพให้คุณ

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

สำหรับการลบสิ่งประดิษฐ์ JPG ออกจากภาพสิ่งประดิษฐ์ JPG สามารถดูคล้ายกับเสียงรบกวนของเซ็นเซอร์ปกติ ซอฟต์แวร์ลดเสียงรบกวนจะค่อนข้างประสบความสำเร็จในการลบสิ่งประดิษฐ์ JPG เล็กน้อย แต่เมื่อสูญเสียรายละเอียด

เสียงเหมือนสิ่งประดิษฐ์ jpg

นี่คือตัวอย่างที่มีคุณภาพ JPG 50% พร้อมการปิดกั้น แต่ยังมีพิกเซลที่เข้มขึ้นและสว่างขึ้นซึ่งมีลักษณะคล้ายกับเสียงรบกวน

Topaz Labs มีผลิตภัณฑ์ที่เรียกว่าDeJpegซึ่งทำหน้าที่เฉพาะกับสิ่งประดิษฐ์ JPG มันทำงานได้ดีโดยไม่สูญเสียรายละเอียดมากเกินไป ปลั๊กอินยังสามารถลดความคมชัดและเสียงทั่วไปได้อีกด้วย ปลั๊กอินเข้ากันได้กับ Photoshop CS, Photoshop Elements และ Paint Shop Pro ฉันไม่คิดว่ามันจะใช้งานได้กับ Lightroom หรือ Aperture


คุณสามารถยกตัวอย่างของสิ่งประดิษฐ์ jpeg ซึ่งดูเหมือนกับเสียงเซนเซอร์หรือไม่?
mattdm

เพิ่มหนึ่งในท้องฟ้ามืดที่บันทึกไว้ที่คุณภาพ JPG 50%
MikeW

5

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

JPEG ทำงานโดยการแปลงภาพให้เป็น [แทนชุด] ความถี่พื้นที่ [s] (ที่ X และ Y เป็นตัวแทนของความถี่แนวนอนและแนวตั้งและ "ความสว่าง" หมายถึงความกว้างของความถี่) ความถี่ต่ำกว่าแอมพลิจูดที่แน่นอนจะถูกละเว้นทำให้ลดจำนวนข้อมูลที่เก็บไว้เพื่อให้ได้การบีบอัด

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

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


3

นี่คือตัวอย่างของ jpeg ที่ขยาย:

ป้อนคำอธิบายรูปภาพที่นี่

ภาพโดยผู้ใช้ Wikipedia FelixH ภาพนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบแสดงที่มา - อนุญาตแบบเดียวกัน 3.0

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

มีหลายสิ่งที่สามารถทำได้เพื่อหลีกเลี่ยงหรือลดปัญหานี้:

  • ชัดเจนที่สุด: อย่าใช้ jpeg คุณอาจต้องการทำงานกับรูปภาพของคุณโดยใช้รูปแบบการบีบอัดแบบไม่สูญเสียข้อมูลเช่น RAW, PNG หรือ TIFF แบบไม่สูญเสียข้อมูล คุณลดระดับเป็น jpeg ในขั้นตอนสุดท้ายเมื่อคุณต้องการอัปโหลดรูปภาพไปยังเว็บอีเมล ฯลฯ

  • รูปแบบ jpeg อนุญาตให้กำหนดค่าระดับการบีบอัด คุณสามารถได้รับสิ่งประดิษฐ์น้อยลงหากคุณต้องการ แต่ไฟล์จะใหญ่ขึ้น

  • หลีกเลี่ยงการบันทึก jpeg ซ้ำแล้วซ้ำอีกเนื่องจากแต่ละรุ่นลดคุณภาพลงไปมากขึ้น


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

@Skaperen: คุณสับสนสองสิ่งที่แตกต่างกันที่นี่ คำถามนี้เกี่ยวกับการสูญเสียรายละเอียดเนื่องจากการบีบอัด jpeg สิ่งที่คุณกำลังอธิบายคือการสูญเสียรายละเอียดที่แนะนำโดยอัลกอริทึมการประมวลผลภาพบางอย่าง สิ่งที่คุณกำลังอธิบายนั้นถูกต้อง แต่ไม่เกี่ยวข้องกับรูปแบบภาพเลยดังนั้นการบอกว่า RAW และ PNG เกี่ยวข้องกับการวัดพิกเซลแบบไม่ถูกต้องรูปแบบไฟล์เหล่านั้นจะไม่ทำให้คุณภาพลดลง
Miguel

ภาพนี้แสดงให้เห็นถึงปัญหาอื่นโดยวิธีการ: มันแสดงให้เห็นถึงรัศมีจากหน้ากากที่ไม่ชัด
mattdm

1

สิ่งประดิษฐ์เป็นผลข้างเคียงที่ไม่พึงประสงค์ของการประมวลผลภาพ ในกรณีนี้เกิดจากวิธีบีบอัดข้อมูลด้วยอัลกอริทึม JPEG

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

การสูญเสียข้อมูลนี้มาจากคุณภาพของภาพ การบีบอัดถูกออกแบบมาเพื่อสร้างผลกระทบน้อยที่สุดกับภาพรวม แต่สามารถสังเกตได้ในระดับการบีบอัดสูง

สิ่งประดิษฐ์ JPEG ส่วนใหญ่มีลักษณะเหมือนส่วนที่เป็นสีบล็อก พวกเขาสามารถเห็นได้ว่ามีการเปลี่ยนสีที่ละเอียดอ่อนในการล้างสีขนาดใหญ่เช่นในท้องฟ้าสีฟ้าหรือฉากที่มีหมอก สิ่งประดิษฐ์มีลักษณะคล้ายเส้นขอบขรุขระของสีที่เฉพาะเจาะจงมากกว่าการผสมผสานที่ราบรื่น

ด้วยฉากที่มีการบีบอัดสูงมากขึ้นสิ่งประดิษฐ์สามารถเห็นได้รอบ ๆ วัตถุ - เช่นกิ่งไม้เทียบกับท้องฟ้า ลักษณะเหล่านี้ดูเหมือนบล็อกที่เป็นรอยโดยรอบตัวแบบ

วิธีที่ดีที่สุดในการลดการประดิษฐ์คือ:

  1. เก็บภาพดั้งเดิมไว้เสมอ - อย่าบันทึก JPEG ที่ถูกบีบอัดจากนั้นเปิดอีกครั้งในภายหลังและบันทึกอีกครั้ง สำหรับตัวอย่างที่สุดขีดนี้ดูGeneration Lossวิดีโอที่แสดงภาพที่ถูกบีบอัดใหม่ 600 ครั้ง
  2. บันทึกที่มีคุณภาพสูงที่สุดเท่าที่เป็นไปได้กำหนดข้อ จำกัด ขนาดไฟล์ใด ๆ
  3. หลีกเลี่ยงการใช้บริการที่บีบอัดรูปภาพของคุณอีกครั้งอย่างรุนแรง - หากจำเป็นต้องโฮสต์ไว้ที่อื่น

สำหรับข้อมูลเพิ่มเติมดูที่http://photo.net/learn/jpeg/

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