• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            coreBugZJ

            此 blog 已棄。

            數字圖像處理上機之三:直方圖均衡化

            灰度直方圖(histogram)是灰度級的函數,它表示圖象中具有每種灰度級的象素的個數,反映圖象中每種灰度出現的頻率?;叶戎狈綀D的橫坐標是灰度級,縱坐標是該灰度級出現的頻率。

            直方圖均衡化是通過灰度變換將一幅圖像轉換為另一幅具有均衡直方圖,即在每個灰度級上都具有相同的象素點數的過程。

            對于離散圖像,轉換公式為

            D = f( d ) = ( H0 + H1 + H2 + ... + Hd ) * Dmax / A0;

            其中 Hi為第 i 級灰度的像素個數,A0 為圖像面積,Dmax 為最大灰度值。





            原圖





            原圖灰度直方圖







            均衡化后





            均衡化后灰度直方圖


            1/*
            2ProcessGrayZ.h
            3
            4Copyright (C) 2011, coreBugZJ, all rights reserved.
            5
            6256級灰度圖處理(灰度直方圖,直方圖均衡化)。
            7*/

            8
            9
            10#ifndef __PROCESSGRAY_Z_H_INCLUDED__
            11#define __PROCESSGRAY_Z_H_INCLUDED__
            12
            13
            14#include "TypeZ.h"
            15#include "ClassImageZ.h"
            16
            17
            18#define GRAY_NUM_Z 256
            19
            20
            21 /* 獲得灰度直方圖數據 */
            22 /* 參數 hist 要求數組大小至少256個元素 */
            23PublicFuncZ R32 getHistogramZ( cImageZ src, U32 hist[] );
            24 /* 創建 256 * 256 黑白圖像,為繪制好的灰度直方圖 */
            25PublicFuncZ ImageZ createImageHistogramZ( cImageZ src );
            26 /* 創建 直方圖均衡化 后的新圖像 */
            27PublicFuncZ ImageZ createImageHistogramEqualizationZ( cImageZ src );
            28
            29
            30#endif /* __PROCESSGRAY_Z_H_INCLUDED__ */
            31



            1/*
            2ProcessGrayZ.c
            3
            4Copyright (C) 2011, coreBugZJ, all rights reserved.
            5
            6256級灰度圖處理(灰度直方圖,直方圖均衡化)。
            7*/

            8
            9
            10#include "stdafx.h"
            11#include "ProcessGrayZ.h"
            12
            13#include <string.h>
            14
            15
            16PublicFuncZ R32 getHistogramZ( cImageZ src, U32 hist[] ) {
            17 U32 i, x, y;
            18 if ( (NULL == hist) || (!isImageValidZ(src)) || (GRAY_NUM_Z != src->colorNum) ) {
            19 return RERR;
            20 }

            21 for ( i = 0; i < GRAY_NUM_Z; ++i ) {
            22 hist[ i ] = 0;
            23 }

            24 for ( y = 0; y < src->height; ++y ) {
            25 for ( x = 0; x < src->width; ++x ) {
            26 ++hist[ *( src->pPixel + src->linePitch * y + x ) ];
            27 }

            28 }

            29 return ROK;
            30}

            31
            32PublicFuncZ ImageZ createImageHistogramZ( cImageZ src ) {
            33 ImageZ img = NULL;
            34 U32 hist[ GRAY_NUM_Z ], mh, x, y;
            35 ColorZ color;
            36
            37 if ( ROK != getHistogramZ( src, hist ) ) {
            38 return NULL;
            39 }

            40
            41 img = createImageZ( GRAY_NUM_Z, GRAY_NUM_Z, 2 );
            42 if ( NULL == img ) {
            43 return NULL;
            44 }

            45
            46 color.r = color.g = color.b = 0;
            47 color.a = 0;
            48 putImagePaletteColorZ( img, 0, &color );
            49 color.r = color.g = color.b = 255;
            50 color.a = 0;
            51 putImagePaletteColorZ( img, 1, &color );
            52
            53 memset( img->pPixel, 1, img->linePitch * img->height );
            54
            55 mh = 0;
            56 for ( x = 0; x < GRAY_NUM_Z; ++x ) {
            57 if ( mh < hist[ x ] ) {
            58 mh = hist[ x ];
            59 }

            60 }

            61 for ( x = 0; x < GRAY_NUM_Z; ++x ) {
            62 y = hist[ x ] * GRAY_NUM_Z / mh;
            63 y = GRAY_NUM_Z - y;
            64 while ( GRAY_NUM_Z > y ) {
            65 *( img->pPixel + y * img->linePitch + x ) = 0;
            66 ++y;
            67 }

            68 }

            69 return img;
            70}

            71
            72PublicFuncZ ImageZ createImageHistogramEqualizationZ( cImageZ src ) {
            73 U32 hist[ GRAY_NUM_Z ], lut[ GRAY_NUM_Z ], x, y, i;
            74 F64 cdf[ GRAY_NUM_Z ], size, sum, tf, t0, t255;
            75 ImageZ img = NULL;
            76
            77 if ( ROK != getHistogramZ( src, hist ) ) {
            78 return NULL;
            79 }

            80
            81 MOV_F64_U32_Z( size, src->width );
            82 MUL_F64_U32_Z( size, size, src->height );
            83
            84 MOV_F64_U32_Z( sum, 0 );
            85 MOV_F64_U32_Z( t255, 255 );
            86 MOV_F64_U32_Z( t0, 0 );
            87 for ( i = 0; i < GRAY_NUM_Z; ++i ) {
            88 ADD_F64_U32_Z( sum, sum, hist[ i ] );
            89 DIV_F64_Z( cdf[ i ], sum, size );
            90 MUL_F64_Z( tf, cdf[ i ], t255 );
            91 MIN_F64_Z( tf, tf, t255 );
            92 MAX_F64_Z( tf, tf, t0 );
            93 MOV_U32_F64_Z( lut[ i ], tf );
            94 }

            95
            96 img = createImageFromImageInfoZ( src );
            97 if ( NULL == img ) {
            98 return NULL;
            99 }

            100 if ( ROK != copyImagePaletteZ( img, src ) ) {
            101 destroyImageZ( img );
            102 return NULL;
            103 }

            104 for ( y = 0; y < img->height; ++y ) {
            105 for ( x = 0; x < img->width; ++x ) {
            106 *( img->pPixel + y * img->linePitch + x ) =
            107 ( (U08)( lut[ * ( src->pPixel + y * src->linePitch + x ) ]
            108 )
            109 );
            110 }

            111 }

            112 return img;
            113}

            114



            posted on 2011-11-15 18:13 coreBugZJ 閱讀(1666) 評論(0)  編輯 收藏 引用 所屬分類: VideoImage 、Algorithm課內作業

            伊色综合久久之综合久久| 欧美激情精品久久久久| 国内精品久久久久久麻豆| 久久99精品久久久久子伦| 久久经典免费视频| 一本久久免费视频| 2021国内久久精品| 7777久久亚洲中文字幕| 久久ZYZ资源站无码中文动漫| 97久久精品无码一区二区| 伊人久久精品线影院| 国产精品欧美久久久久无广告 | 97久久精品无码一区二区| 日本精品久久久久中文字幕| 丁香狠狠色婷婷久久综合| 久久久久亚洲AV无码专区桃色| 久久这里只有精品久久| 久久精品亚洲男人的天堂| 久久精品国产精品亚洲| 99久久这里只精品国产免费| 久久久精品2019免费观看| 久久99国产精品99久久| 久久人人超碰精品CAOPOREN| 色综合久久夜色精品国产| AV无码久久久久不卡网站下载| 93精91精品国产综合久久香蕉| 久久综合久久鬼色| 亚洲人成网亚洲欧洲无码久久| 国产国产成人精品久久| 亚洲精品NV久久久久久久久久| 午夜精品久久久久久久久| 99久久免费只有精品国产| 久久久一本精品99久久精品88| 久久国产免费观看精品| 久久天天躁狠狠躁夜夜2020一| 丰满少妇高潮惨叫久久久| 久久久久亚洲AV无码去区首| 久久精品夜夜夜夜夜久久| 久久久久亚洲国产| 亚洲国产精品综合久久一线| 久久青青草原亚洲av无码app |