中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

三種算法轉換色彩灰階

發布時間:2020-07-06 23:32:03 來源:網絡 閱讀:5433 作者:secondriver 欄目:開發技術

    原文:Three algorithms for converting color to grayscale


     如何轉換成彩***像灰度?如果每個彩色像素由三重(R,G,B)(紅,綠,藍)的強度描述,

如何講(R,G,B)映射到一個單獨的數字作為的灰度值?在GIMP圖像處理軟件有三種算法。


    lightness方法:是取最突觸顏色和最不突出顏色的平均值: (max(R, G, B) + min(R, G, B)) / 2.

    average方法:最簡單取R,G,B的平均值:(R+G+B)/3 .

    luminosity方法:是平均方法的一個更復雜的版本。它也是平均值,但它通過加權平均來解釋人類感知。我們對綠色比其他顏色更敏感,所以綠色加權最大。其計算公式為亮度為0.21 R +0.72 G +0.07 B.

   

    下面向日葵圖片示例來自GIM文檔

    

    三種算法轉換色彩灰階


   lightness方法傾向于降低對比度。luminosity方法效果最好,如果你使用GIMP改變一個圖片從RGB到灰度圖片通過Image->ModeMenu,該方法是默認使用的方法。

然而,一些圖像看起來更好地利用其他算法之一,有時三種方法產生非常相似的結果。


  更多關于顏色和灰度


 附:

 1. 調色板:https://www.google.com/design/spec/style/color.html#color-color-palette

 2. GIMP(GNU Image Manipulation Program):開源圖片處理工具 開源免費跨平臺。

 3. jscience 開源庫提供的灰階計算加權值常量文檔

 4. Java封裝GIMP和Jscience提供的灰階計算方法,代碼示例:

    

/**
     * Compute method about grayscale from
     * <p/>
     * gimp website
     * http://docs.gimp.org/2.6/en/gimp-tool-desaturate.html
     * http://www.gimp.org/
     * <p/>
     * http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/
     * http://www.johndcook.com/blog/2009/08/24/more-on-colors-and-grayscale/
     */
    public static class GrayScaleUtil {
        interface GrayScaleCompute {
            int grayScale(int r, int g, int b);
        }

        public enum GrayScale {

            Lightness(new GrayScaleCompute() {
                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.lightness(r, g, b);
                }
            }),
            Average(new GrayScaleCompute() {
                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.average(r, g, b);
                }
            }),
            Luminosity(new GrayScaleCompute() {
                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.luminosity(r, g, b);
                }
            }),

            BT709(new GrayScaleCompute() {

                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.BT709(r, g, b);
                }
            }),

            RMY(new GrayScaleCompute() {
                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.RMY(r, g, b);
                }
            }),
            Y(new GrayScaleCompute() {
                @Override
                public int grayScale(int r, int g, int b) {
                    return GrayScaleUtil.Y(r, g, b);
                }
            });

            private GrayScaleCompute gc;

            GrayScale(GrayScaleCompute gc) {
                this.gc = gc;
            }

            public int grayScale(int r, int g, int b) {
                return this.gc.grayScale(r, g, b);
            }
        }

        //Lightness = (max(r,g,b)+min(r,g,b))/2
        public static int lightness(int r, int g, int b) {
            return (Math.max(Math.max(r, g), b) + Math.min(Math.min(r, g), b)) / 2;
        }

        // Average Brightness = (r+g+b)/3
        public static int average(int r, int g, int b) {
            return (r + g + b) / 3;
        }

        //Luminosity =(0.21*r+0.72*g+0.07*b)
        public static int luminosity(int r, int g, int b) {
            return (int) (0.21 * r + 0.72 * g + 0.07 * b);
        }

        /**
         * Magic number about grayscale from http://jscience.org/experimental/javadoc/org/jscience/computing/ai/vision/GreyscaleFilter.html
         */
        //BT709 Greyscale: Red: 0.2125 Green: 0.7154 Blue: 0.0721
        public static int BT709(int r, int g, int b) {
            return (int) (0.2125 * r + 0.7154 * g + 0.0721 * b);
        }

        //RMY Greyscale: Red: 0.5 Green: 0.419 Blue: 0.081
        public static int RMY(int r, int g, int b) {
            return (int) (0.5 * r + 0.419 * g + 0.081 * b);
        }

        //Y-Greyscale (YIQ/NTSC): Red: 0.299 Green: 0.587 Blue: 0.114
        public static int Y(int r, int g, int b) {
            return (int) (0.299 * r + 0.587 * g + 0.114 * b);
        }
    }


  

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高陵县| 安国市| 衡阳县| 衡南县| 资中县| 岳池县| 博罗县| 乐平市| 南开区| 南充市| 苍山县| 新疆| 咸丰县| 沁源县| 凉山| 桓仁| 河东区| 弥勒县| 阿拉善右旗| 丰都县| 丘北县| 志丹县| 黄浦区| 古丈县| 宁波市| 康定县| 涪陵区| 凤山县| 邻水| 碌曲县| 贺兰县| 双辽市| 左权县| 民权县| 金川县| 兴仁县| 郯城县| 玉树县| 横山县| 荥阳市| 淳安县|