Seven grayscale conversion algorithms (with pseudocode and VB6 source code)
I have uploaded a great many image processing demonstrations over the years, but today’s project – grayscale conversion techniques – is actually the image processing technique that generates the most email queries for me. I’m glad to finally have a place to send those queries!
Despite many requests for a grayscale demonstration, I have held off coding anything until I could really present something unique. I don’t like adding projects to this site that offer nothing novel or interesting, and there are already hundreds of downloads – in every programming language – that demonstrate standard color-to-grayscale conversions. So rather than add one more “here’s a grayscale algorithm” article, I have spent the past week collecting every known grayscale conversion routine. To my knowledge, this is the only project on the Internet that presents seven unique grayscale conversion algorithms, and at least two of the algorithms – custom # of grayscale shades with and without dithering – were written from scratch for this very article.
So without further ado, here are seven unique ways to convert a full-color image to grayscale. (Note: I highly recommend reading the full article so you understand how the various algorithms work and what their purposes might be, but if all you want is the source code, you’ll find it past all the pictures and just above the donation link.)
Grayscale – An Introduction
Black and white (or monochrome) photography dates back to the mid-19th century. Despite the eventual introduction of color photography, monochromatic photography remains popular. If anything, the digital revolution has actually increased the popularity of monochromatic photography because any digital camera is capable of taking black-and-white photographs (whereas analog cameras required the use of special monochromatic film). Monochromatic photography is sometimes considered the “sculpture” variety of photographic art. It tends to abstract the subject, allowing the photographer to focus on form and interpretation instead of simply reproducing reality.
Because the terminology black-and-white is imprecise – black-and-white photography actually consists of many shades of gray – this article will refer to such images as grayscale.
Several other technical terms will be used throughout my explanations. The first is color space. A color space is a way to visualize a shape or object that represents all available colors. Different ways of representing color lead to different color spaces. The RGB color space is represented as a cube, HSL can be a cylinder, cone, or bicone, YIQ and YPbPr have more abstract shapes. This article will primarily reference the RGB and HSL color spaces.
I will also refer frequently to color channels. Most digital images are comprised of three separate color channels: a red channel, a green channel, and a blue channel. Layering these channels on top of each other creates a full-color image. Different color models have different channels (sometimes the channels are colors, sometimes they are other values like lightness or saturation), but this article will primarily focus on RGB channels.
How all grayscale algorithms fundamentally work
All grayscale algorithms utilize the same basic three-step process:
Get the red, green, and blue values of a pixel
Use fancy math to turn those numbers into a single gray value
Replace the original red, green, and blue values with the new gray value
When describing grayscale algorithms, I’m going to focus on step 2 – using math to turn color values into a grayscale value. So, when you see a formula like this:
Gray = (Red + Green + Blue) / 3
Recognize that the actual code to implement such an algorithm looks like:
For Each Pixel in Image {
Red = Pixel.Red
Green = Pixel.Green
Blue = Pixel.Blue
Gray = (Red + Green + Blue) / 3
Pixel.Red = Gray
Pixel.Green = Gray
Pixel.Blue = Gray
}
On to the algorithms!
Sample Image:
Promo art for The Secret of Monkey Island: Special Edition, ©2009 LucasArts
This bright, colorful promo art for The Secret of Monkey Island: Special Edition will be used to demonstrate each of our seven unique grayscale algorithms.
Method 1 – Averaging (aka “quick and dirty”)
Grayscale - average method
Grayscale image generated from the formula: Average(Red, Green, Blue)
This method is the most boring, so let’s address it first. “Averaging” is the most common grayscale conversion routine, and it works like this:
Gray = (Red + Green + Blue) / 3
Fast, simple – no wonder this is the go-to grayscale algorithm for rookie programmers. This formula generates a reasonably nice grayscale equivalent, and its simplicity makes it easy to implement and optimize (look-up tables work quite well). However, this formula is not without shortcomings – while fast and simple, it does a poor job of representing shades of gray relative to the way humans
เจ็ดขั้นตอนวิธีการแปลงสีเทา (มี pseudocode และ source code VB6)
ผมได้อัพโหลดที่ดีการสาธิตการประมวลผลภาพมากมายในช่วงหลายปีที่ผ่านมา แต่โครงการของวันนี้ - เทคนิคการแปลงสีเทา - เป็นจริงเทคนิคการประมวลผลภาพที่สร้างแบบสอบถามอีเมลที่สุดสำหรับฉัน ฉันดีใจที่ในที่สุดก็มีสถานที่ในการส่งคำสั่งเหล่านั้น
แม้จะมีการร้องขอหลายสำหรับการสาธิตสีเทาผมได้จัดขึ้นปิดการเข้ารหัสอะไรจนกว่าฉันสามารถทำได้ในปัจจุบันจริงๆสิ่งที่เป็นเอกลักษณ์ ฉันไม่ชอบการเพิ่มโครงการไปยังเว็บไซต์นี้ที่นำเสนอนวนิยายเรื่องอะไรหรือน่าสนใจและมีอยู่แล้วนับร้อยของการดาวน์โหลด - ในทุกภาษาการเขียนโปรแกรม - ที่แสดงให้เห็นการแปลงสีเพื่อสีเทามาตรฐาน ดังนั้นแทนที่จะเพิ่มอีกหนึ่ง "นี่เป็นสีเทาอัลกอริทึมบทความ" ผมได้ใช้เวลาสัปดาห์ที่ผ่านมาเก็บที่รู้จักกันทุกสีเทาประจำแปลง เพื่อความรู้ของฉันนี้เป็นโครงการเฉพาะบนอินเทอร์เน็ตที่นำเสนอเจ็ดขั้นตอนวิธีการสีเทาแปลงที่ไม่ซ้ำกันและอย่างน้อยสองของอัลกอริทึม - กำหนดเอง # ของเฉดสีโทนสีเทาที่มีและไม่มี dithering -. ถูกเขียนขึ้นจากรอยขีดข่วนสำหรับบทความนี้มาก
โดยไม่ต้องต่อไป ความกังวลใจที่นี่มีเจ็ดวิธีที่ไม่ซ้ำกันในการแปลงภาพเต็มรูปแบบสีระดับสีเทา (หมายเหตุ: ผมขอแนะนำให้อ่านบทความเต็มรูปแบบเพื่อให้คุณเข้าใจวิธีการขั้นตอนวิธีการต่างๆทำงานและสิ่งวัตถุประสงค์อาจจะมี แต่ถ้าสิ่งที่คุณต้องการคือรหัสที่มาคุณจะพบว่าที่ผ่านมาภาพทั้งหมดและอยู่เหนือการเชื่อมโยงการบริจาค .)
สีเทา - Introduction
สีดำและสีขาว (หรือขาวดำ) วันที่ถ่ายภาพกลับไปช่วงกลางศตวรรษที่ 19 แม้จะมีการเปิดตัวที่สุดของการถ่ายภาพสีถ่ายภาพเดียวคงเป็นที่นิยม หากสิ่งที่การปฏิวัติดิจิตอลได้เพิ่มขึ้นจริงความนิยมของการถ่ายภาพเดียวเพราะกล้องดิจิตอลที่มีความสามารถในการถ่ายภาพขาวดำและสี (ในขณะที่กล้องอะนาล็อกจำเป็นต้องใช้ของฟิล์มสีเดียวพิเศษ) การถ่ายภาพขาวดำเป็นที่ยอมรับว่าบางครั้ง "ประติมากรรม" ความหลากหลายของศิลปะการถ่ายภาพ มันมีแนวโน้มที่เป็นนามธรรมเรื่องที่ช่วยให้ช่างภาพที่จะมุ่งเน้นรูปแบบและการตีความแทนที่จะทำซ้ำความเป็นจริง.
เพราะคำศัพท์สีดำและสีขาวเป็นคลุมเครือ - ดำและสีขาวถ่ายภาพจริงประกอบด้วยหลายเฉดสีเทา - บทความนี้จะ อ้างถึงภาพดังกล่าวเป็นสีเทา.
หลายคำศัพท์ทางเทคนิคอื่น ๆ จะถูกนำมาใช้ตลอดคำอธิบายของฉัน ครั้งแรกเป็นพื้นที่สี พื้นที่สีเป็นวิธีที่จะเห็นภาพรูปร่างหรือวัตถุที่แสดงถึงสีที่มีอยู่ทั้งหมด วิธีการที่แตกต่างกันของการเป็นตัวแทนนำสีไปที่ช่องว่างสีที่แตกต่าง พื้นที่สี RGB จะแสดงเป็นก้อน, HSL สามารถเป็นทรงกระบอกกรวยหรือ bicone, YIQ และ YPbPr มีรูปร่างนามธรรมมากขึ้น บทความนี้ส่วนใหญ่จะอ้างอิง RGB และสี HSL พื้นที่.
ฉันยังจะอ้างบ่อยช่องสี ภาพดิจิตอลส่วนใหญ่จะประกอบด้วยสามช่องแยกสี: ช่องสีแดง, ช่องสีเขียวและช่องสีฟ้า Layering ช่องทางเหล่านี้อยู่ด้านบนของแต่ละอื่น ๆ สร้างภาพเต็มรูปแบบสี รูปแบบสีที่แตกต่างกันมีช่องรายการที่แตกต่างกัน (บางครั้งช่องที่มีสีบางครั้งพวกเขามีค่าอื่น ๆ เช่นความสว่างหรือความอิ่มตัว) แต่บทความนี้ส่วนใหญ่จะมุ่งเน้นไปที่ช่อง RGB.
วิธีขั้นตอนวิธีการสีเทาทั้งหมดพื้นฐานการทำงาน
ทุกขั้นตอนวิธีการสีเทาใช้พื้นฐานสามขั้นตอนเดียวกัน กระบวนการ:
รับค่าสีแดง, สีเขียวและสีฟ้าของพิกเซล
ใช้คณิตศาสตร์แฟนซีเพื่อเปิดตัวเลขเหล่านี้เป็นค่าสีเทาเดียว
แทนค่าสีแดงสีเขียวและสีฟ้าเดิมที่มีค่าสีเทาใหม่
เมื่ออธิบายขั้นตอนวิธีการสีเทาฉันจะ มุ่งเน้นไปที่ขั้นตอนที่ 2 - การใช้คณิตศาสตร์เพื่อเปิดค่าสีเป็นค่าระดับสีเทา ดังนั้นเมื่อคุณเห็นสูตรเช่นนี้:
สีเทา = (สีแดง + สีเขียว + สีฟ้า) / 3
ยอมรับว่ารหัสที่เกิดขึ้นจริงในการดำเนินการขั้นตอนวิธีการดังกล่าวมีลักษณะดังนี้:
สำหรับพิกเซลในภาพ {แต่ละ
สีแดง = Pixel.Red
สีเขียว = Pixel.Green
สีน้ำเงิน = Pixel.Blue
สีเทา = (สีแดง + สีเขียว + สีฟ้า) / 3
Pixel.Red = สีเทา
Pixel.Green = สีเทา
Pixel.Blue = สีเทา
}
ในการอัลกอริทึม!
ตัวอย่างภาพ:
ศิลปะโปรโมชั่นสำหรับความลับของเกาะลิง: พิเศษ ฉบับ© 2009 LucasArts
นี้สดใสศิลปะโปรโมชั่นที่มีสีสันสำหรับความลับของเกาะลิง: ฉบับพิเศษจะใช้ในการแสดงให้เห็นถึงแต่ละขั้นตอนวิธีการสีเทาของเราเจ็ดที่ไม่ซ้ำกัน.
วิธีที่ 1 - Averaging (aka "รวดเร็วและสกปรก")
โทนสีเทา - วิธีถัวเฉลี่ย
ระดับสีเทา ภาพที่สร้างขึ้นจากสูตร: มาตรฐาน (สีแดง, สีเขียว, สีฟ้า)
วิธีนี้เป็นที่น่าเบื่อที่สุดเพื่อให้เป็นที่อยู่ของมันเป็นครั้งแรก "ค่าเฉลี่ย" เป็นส่วนใหญ่สามัญประจำแปลงสีเทาและการทำงานเช่นนี้
สีเทา = (สีแดง + สีเขียว + สีฟ้า) / 3
เร็ว, ง่าย - ไม่น่าแปลกใจนี้เป็นไปเพื่อสีเทาอัลกอริทึมสำหรับโปรแกรมเมอร์มือใหม่ สูตรนี้จะสร้างเทียบเท่าระดับสีเทาที่ดีพอสมควรและความเรียบง่ายของมันทำให้มันง่ายที่จะใช้และเพิ่มประสิทธิภาพ (ตารางมองขึ้นทำงานได้ค่อนข้างดี) แต่สูตรนี้ไม่ได้โดยไม่มีข้อบกพร่อง - ในขณะที่ง่ายและรวดเร็วก็จะได้งานที่ดีของการเป็นตัวแทนของญาติเฉดสีเทาถึงวิธีที่มนุษย์
การแปล กรุณารอสักครู่..

ขั้นตอนวิธีการแปลงเจ็ดระดับสีเทา ( ซูโดโค้ด VB6 รหัสที่มาและ )ฉันได้อัปโหลดภาพการสาธิตการประมวลผลหลายปี แต่ปัจจุบันโครงการ–สีเทาแปลงเทคนิค–เป็นจริงเทคนิคการประมวลผลภาพที่สร้างแบบสอบถามอีเมล์มากที่สุดสำหรับฉัน ดีใจที่ในที่สุดก็มีสถานที่เพื่อส่งแบบสอบถามเหล่านั้น !แม้จะมีการร้องขอหลายสำหรับสีเทา ( ฉันได้จัดขึ้นปิดรหัสอะไร จนกว่าจะสามารถนำเสนอบางสิ่งบางอย่างที่ไม่ซ้ำกัน ฉันไม่ชอบการเพิ่มโครงการในเว็บไซต์นี้ที่มีอะไรแปลกใหม่หรือน่าสนใจ และมีหลายร้อยของการดาวน์โหลดสำหรับทุกภาษาการเขียนโปรแกรมที่แสดงให้เห็นถึงมาตรฐานการแปลงค่าสีและระดับสีเทา ดังนั้นแทนที่จะเพิ่มอีก " นี่เป็นบทความเป็นสีเทาแบบ ฉันใช้เวลาตลอดสัปดาห์ที่รวบรวมทุกรู้จักสีเทาแปลงตามปกติ เพื่อความรู้ของฉัน นี้เป็นโครงการเดียวบนอินเทอร์เน็ตที่นำเสนอเจ็ดเฉพาะสีเทาการแปลงอัลกอริทึม และอย่างน้อยสองของขั้นตอนวิธี–เอง # เฉดสีเทาที่มีและไม่มีการเกลี่ยสี และถูกเขียนจากรอยขีดข่วนสำหรับบทความนี้มากดังนั้นไม่มีความกังวลใจ ที่นี่มีเจ็ดวิธีเฉพาะเพื่อแปลงเต็มรูปแบบภาพระดับสีเทา ( หมายเหตุ : ผมขอแนะนำให้อ่านบทความเต็มรูปแบบเพื่อให้คุณเข้าใจขั้นตอนวิธีต่างๆทำงานอย่างไรและสิ่งที่วัตถุประสงค์ของพวกเขาอาจจะ แต่ถ้าทั้งหมดที่คุณต้องการคือรหัสแหล่งที่มา , คุณจะพบว่ามันผ่านมาทั้งหมดภาพและเหนือการบริจาคที่ลิงค์ )สีเทาสำหรับแนะนำดำและขาว ( หรือขาวดำ ) การถ่ายภาพวันที่กลับไปศตวรรษที่ 19 แม้เบื้องต้นที่สุดของการถ่ายภาพสี การถ่ายภาพสีเดียวที่ยังคงได้รับความนิยม ถ้าอะไร การปฏิวัติดิจิตอลได้เพิ่มความนิยมของการถ่ายภาพสีเดียว เพราะกล้องดิจิตอลมีความสามารถในการถ่ายภาพขาว - ดำ ( ในขณะที่กล้องอนาล็อกต้องใช้ฟิล์ม monochromatic พิเศษ ) การถ่ายภาพสีเดียวบางครั้งก็ถือว่าเป็น " ประติมากรรม " ความหลากหลายของศิลปะภาพถ่าย มันจึงเป็นเรื่องที่ช่วยให้ช่างภาพเพื่อเน้นรูปแบบและการตีความ แทนที่จะสร้างความเป็นจริงเพราะศัพท์ที่ดำเป็นขาวดำการถ่ายภาพจริง ๆและคลุมเครือ ประกอบด้วยหลายเฉดสีเทาของ–บทความนี้จะดูภาพ เช่น ระดับสีเทาเงื่อนไขด้านเทคนิคหลาย ๆ จะใช้ตลอดคำอธิบายของฉัน ส่วนแรกคือพื้นที่สี สีพื้นที่เป็นวิธีที่จะเห็นรูปร่างหรือวัตถุที่แสดงถึงสีทั้งหมด วิธีที่แตกต่างกันของการแสดงสี ทำให้เกิดเป็นสีต่าง ๆ ในพื้นที่สี RGB จะแสดงเป็นลูกบาศก์ , HSL เป็นทรงกระบอก กรวย หรือไบโคน yiq ypbpr , และมีรูปร่างที่เป็นนามธรรมมากกว่า บทความนี้จะเป็นหลักอ้างอิง RGB และเป็นสี HSL .ผมจะอ้างบ่อยช่องสี ภาพดิจิตอลมากที่สุด แบ่งเป็นสามช่องช่องแยก สี : สีแดง , สีเขียวและสีฟ้า ช่อง , ช่อง layering ช่องทางเหล่านี้ที่ด้านบนของแต่ละอื่น ๆสร้างเต็มรูปแบบภาพ โมเดลสีต่าง ๆ มีช่องทางที่แตกต่างกัน ( บางครั้งช่องสี บางครั้งก็เป็นค่าอื่นๆ เช่น ความสว่าง หรือ ความเข้ม แต่บทความนี้จะมุ่งเน้นหลักในช่อง RGBวิธีการขั้นตอนวิธีสีเทาทุกพื้นฐานงานขั้นตอนวิธีสีเทาทั้งหมด ใช้ขั้นตอนเดียวกันสามขั้นตอนพื้นฐาน :รับสีแดง สีเขียว สีฟ้า และค่าของพิกเซลใช้คณิตศาสตร์แฟนซีเปิดตัวเลขเหล่านั้นลงในเดียวสีเทาค่าแทนที่เดิมสีแดง , เขียวและค่าสีฟ้าที่มีค่าสีเทาใหม่เมื่ออธิบายขั้นตอนวิธีการไล่สีเทา , ผมจะมุ่งเน้นไปที่ขั้นตอนที่ 2 –การใช้คณิตศาสตร์เพื่อเปลี่ยนค่าสีเป็นสีเทาค่า ดังนั้น เมื่อคุณเห็นชื่อนี้สีเทา = ( แดง + เขียว + น้ำเงิน ) / 3จำรหัสจริงที่จะใช้เช่นอัลกอริทึมดูเหมือนว่า :สำหรับแต่ละพิกเซลในภาพ {พิกเซลสีแดง = สีแดงพิกเซลสีเขียว = สีเขียวพิกเซลสีน้ำเงิน = สีฟ้าสีเทา = ( แดง + เขียว + น้ำเงิน ) / 3พิกเซล สีแดง สีเทาพิกเซล สีเขียว = สีเทาพิกเซล สีฟ้า = สีเทา}ในขั้นตอนวิธีการ !ตัวอย่างภาพ :โปรโมชั่นศิลปะความลับของเกาะลิง : ฉบับพิเศษ , © 2009 LucasArtsศิลปะสีสันสดใสนี้ โปรโมชั่นสำหรับความลับของเกาะลิง : รุ่นพิเศษจะถูกใช้เพื่อแสดงให้เห็นถึงเอกลักษณ์ของแต่ละของเราเจ็ดสีเทาอัลกอริธึมวิธีที่ 1 โดยเฉลี่ย ( aka " ที่รวดเร็วและสกปรก " )สีเทา - วิธีเฉลี่ยระดับสีเทาภาพที่สร้างขึ้นจากสูตร : เฉลี่ย ( สีแดง , สีเขียว , สีฟ้า )วิธีนี้เป็นวิธีที่น่าเบื่อที่สุดเลย งั้นขอที่อยู่ก่อน " เฉลี่ย " เป็นส่วนใหญ่สีเทาแปลงขั้นตอนและการทำงานเช่นนี้สีเทา = ( แดง + เขียว + น้ำเงิน ) / 3รวดเร็วและง่าย ไม่สงสัยเลยว่านี่คือไปสีเทาขั้นตอนวิธีสำหรับโปรแกรมเมอร์มือใหม่ สูตรนี้จะเหมาะสมดีเทียบเท่าระดับสีเทาและความเรียบง่ายของมันทำให้มันง่ายที่จะใช้และเพิ่มประสิทธิภาพ ( มองขึ้นตารางทำงานค่อนข้างดี ) แต่สูตรนี้ไม่มีข้อบกพร่อง–ในขณะที่ง่ายและรวดเร็ว มันไม่ได้งานที่ดีของ relati แทนเฉดสีเทา
การแปล กรุณารอสักครู่..
