フレームを表示

L_GetBitmapHistogram

フレームを表示

#include "l_bitmap.h"

L_LTIMGCLR_API L_INT L_GetBitmapHistogrampBitmap、pHisto、uHistoLen、uFlags

pBITMAPHANDLE pBitmap;

/* ビットマップハンドルへのポインター*/

L_UINT64 *pHisto;

/* ヒストグラムを保持する配列*/

L_SIZE_T uHistoLen;

/* ヒストグラムのlength*/

L_UINT uFlags;

/* フラグ*/

各々の輝度レベルが何度ビットマップで発生するかについて図を作成する配列を作成します。この関数は、別に、または、一緒に、赤・緑・青の図を作成することができます。それが、すべての解像度(12と16ビットグレースケールを含む)のために使われます。

パラメーター

説明

pBitmap

ビットマップを参照文に引用しているビットマップハンドルへのポインター。

pHisto

各々の輝度レベルがimageで発生する回数の図を作成するサインがない64ビット整数の配列。

uHistoLen

ヒストグラムのlength。

uFlags

ヒストグラムを計算する際に使用にヒストグラムとビットを取得するチャネルを示すFlags。

以下のフラグは、使用にチャネルを示します。ビットマップが12または16ビットグレースケールであるならば、この値は無視されます。設定可能な値は、以下の通りです。

 

意味

 

CHANNEL_MASTER

[0x0000]全てのchannels*

 

CHANNEL_RED

[0x0001]Redチャネルだけ。

 

CHANNEL_GREEN

[0x0002]緑チャネルのみ。

 

CHANNEL_BLUE

[0x0003]Blueチャネルだけ。

 

以下のフラグは、ヒストグラムを計算するとき、どのビットを使うべきか決定します。ビットマップが12または16ビットグレースケールである場合だけ、この値が使われます。設定可能な値は、以下の通りです。

 

意味

 

HIST_LOWHIGH_BITS

[0x0000]、使います唯一の、LowBit間のビットとHighBit値は、ビットマップハンドルで保存しました。

 

HIST_ALL_BITS

[0x0010]、ヒストグラムを計算するためのすべてのビットを使います(ビットマップハンドルからのLowBitとHighBit値は、無視されます。

戻り値

SUCCESS

関数は成功しました。

<1

エラーが発生しました。リターンコードを参照してください

コメント

状況表示バーを更新するか、この関数の実行の間、ユーザー割り込みを検出するために、L_SetStatusCallbackを参照します。

この関数は、12と16ビットグレースケールと48と64ビットカラーイメージをサポートします。12と16ビットグレースケールと48と64ビットカラーイメージのサポートは、DocumentとMedical画像化ツールキットで利用できます。

この関数は、32ビットグレースケールイメージをサポートしません。32ビットグレースケールimageがこの関数に渡されるならば、それはエラーコードERROR_GRAY32_UNSUPPORTEDを返します。

1、2、3、4、5、6、7、8、16、24、と32ビットカラービットマップのために、輝度レベルは0から255にわたります。したがって、生成される配列には項目が256個あり、輝度によってインデックスが付けられます。各項目の値は、輝度レベルの発生回数です。

48と64ビットイメージのために、輝度レベルは0から65535にわたります。したがって、結果として生じる配列は65536の項目を持っています。そして、明度値によって索引付けされます。各項目の値は、その特定の輝度レベルの反復回数です。

この関数は、12-and 16ビットグレースケールイメージに関しても機能します。これらのビットマップ内の輝度値は、16ビットグレースケールの場合は0~(2^16 1)で、12ビットグレースケールの場合は0~(2^12 1)です。LowBit とHighBit は、12ビットまたは16ビットのエントリにどちらのビットを使用するかを判断します。LowBitとHighBitは、L_GetMinMaxBitsを用いて、または、BITMAPHANDLE自体の対応するフィールドを見ることによって得られることができます。

具体的には、HIST_LOWHIGH_BITSがuFlagsで設定されるならば、テーブルは少なくとも2^(HighBit LowBit + 1)エントリを保持しなければなりません。HIST_ALL_BITSがuFlagsで設定されるならば、テーブルは16ビットビットマップのために12ビットビットマップと65536のために少なくとも4096を保持しなければなりません。

たとえば、HIST_LOWHIGH_BITSがuFlagsで設定されるとします、そして、LowBit = 2とHighBit = 7で16ビットグレースケールimageを持っています。グレースケールの輝度は 2^(7-2+1) = 64である可能性があります。したがって、テーブルは少なくとも64のエントリを保持しなければなりません。0に設定されるビット2 7によるグレースケール値の数は、pHisto [0]で見つかります。1に設定されるビット2と0に設定されるビット3 7によるグレースケール値の数は、pHisto [63]までpHisto [1]などで見つかります。低位ビットが2である、そして、高位ビットが7であるため、ビット0、1とビット8 15のすべては0でなければなりません。したがって、ビット2 7で設定される値は、imageに存在する強度を決定します。以下の表では、グレーの列は画像で常に0になるビットを表します。ビット7からビット2までの列は、それぞれのビットでとりうる設定を表します。最後の列は、対応する設定があるグレースケール値の数のpHisto配列の中で、場所を与えます。たとえば、pHisto [0]は強度0(すべてのビットは0に設定)のグレースケール値の数を格納します。pHisto [1]は、強度4(1に設定される2ビット位置)で、すべてのグレースケール値を格納します。pHisto [2]は、強度8(0まで1と残りのビット集合に設定される3つのビット)などで、すべてのグレースケール値を格納します。

ビット8 15

ビット7

ビット6

ビット5

ビット4

ビット3

ビット2

ビット1

ビット0

pHistoのカウント場所

すべて0

0

0

0

0

0

0

0

0

pHisto [0]

すべて0

0

0

0

0

0

1

0

0

pHisto [1]

すべて0

0

0

0

0

1

0

0

0

pHisto [2]

すべて0

0

0

0

0

1

1

0

0

pHisto [3]

すべて0

0

0

0

1

0

0

0

0

pHisto [4]

 

 

 

 

 

 

 

 

 

そして、その他

すべて0

1

1

1

1

1

1

0

0

pHisto [63]

他の例として、LowBit = 0とHighBit = 15で16ビットグレースケールimageを持っているとします。テーブルは、2^16 = 65,536のL_UINT64値を保持しなければなりません。

*マスターチャネル値を計算すること

LEADTOOLSで広く使われている画像処理フィルタの速度を上げるために、カラー画像のグレースケール値(マスターチャネル)は、以下の手法を用いて計算されます:

#define CalcGrayValue(r, g, b) ((L_UCHAR)(((L_UCHAR) (((2 * (L_UINT) (r)) + (5 * (L_UINT) (g)) + (L_UINT) (b) + 4) / 8))))
#define CalcGrayValue16(r, g, b) ((L_UINT16) (((2 * (L_UINT32) (r)) + (5 * (L_UINT32) (g)) + (L_UINT32) (b) + 4) / 8))
#define CalcGrayValue32(r, g, b) ((L_UINT32) (((2 * (L_UINT32) (r)) + (5 * (L_UINT32) (g)) + (L_UINT32) (b) + 4) / 8))

必須のDLLとライブラリ

LTIMGCLR

ツールキットバージョンに基づいた正確なDLLとライブラリのリストについては、「アプリケーションとともに配布するファイル」を参照してください

プラットホーム

Win32、x64、Linux

参照

関数:

L_ChangeBitmapIntensity, L_GammaCorrectBitmap, L_ChangeBitmapContrast, L_HistoContrastBitmap, L_StretchBitmapIntensity, L_RemapBitmapIntensity, L_InvertBitmap, L_ChangeBitmapHue, L_ChangeBitmapSaturation, L_HistoEqualizeBitmap, L_FillBitmap, L_GetPixelColor, L_PutPixelColor, L_WindowLevel , L_ChannelMix, L_DeinterlaceBitmap, L_DesaturateBitmap, L_EdgeDetectStatisticalBitmap, L_LightControlBitmap, L_SmoothEdgesBitmap, L_LocalHistoEqualizeBitmap, L_AddWeightedBitmaps, L_ColorMergeBitmap, L_ColorSeparateBitmap, L_ConvertColorSpace, L_MultiplyBitmap, L_AutoColorLevelBitmap, L_ColorLevelBitmap, L_CorrelationBitmap, L_GrayScaleToDuotone, L_GrayScaleToMultitone, L_HolesRemovalBitmapRgn, L_SelectiveColorBitmap, L_SkeletonBitmap, L_ChangeHueSatIntBitmap, L_ColorReplaceBitmap, L_ColorThresholdBitmap, L_MathFunctionBitmap, L_SegmentBitmap, L_AdaptiveContrastBitmap, L_ApplyMathLogicBitmap, L_ColorIntensityBalance, L_ColorizeGrayBitmap, L_ContBrightIntBitmap, L_DigitalSubtractBitmap, L_DynamicBinaryBitmap, L_EdgeDetectEffectBitmap, L_FunctionalLightBitmap, L_MultiScaleEnhancementBitmap, L_SelectBitmapData, L_ShiftBitmapData

トピック:

ラスター画像は機能します:輝度値の変更

 

明度とコントラストの変更

 

ラスター画像は機能します:明度とコントラストの変更

 

カラーハーフトーンとハーフトーン画像

サンプル

このサンプルは24ピクセル当たりビットでビットマップをロードして、赤いチャネルヒストグラムを作成して、ヒストグラムの中で最も明るくて最も暗い強度を見つけて、値を示します

#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName


L_LTIMGTEX_API  L_INT GetBitmapHistogramExample(L_VOID)
{
   L_INT nRet;
   L_TCHAR szMessage[80];               /* Buffer for the MessageBox string */
   BITMAPHANDLE LeadBitmap;    /* Bitmap handle to hold the loaded image */
   L_UINT64 Histogram[256];           /* Array for the histogram */
   L_INT nIndex;                               /* Array index */
   L_INT nBrightest;                         /* Brightest value */
   L_INT nDarkest;                           /* Darkest value */
   /* Load the bitmap at 24  bits per pixel */
   nRet = L_LoadBitmap (MAKE_IMAGE_PATH(TEXT("ImageProcessingDemo\\Image3.cmp")), &LeadBitmap, sizeof(BITMAPHANDLE), 24, ORDER_BGR, NULL, NULL);
   if(nRet !=SUCCESS)
      return nRet;
   /* Create the red-channel histogram */
   nRet = L_GetBitmapHistogram(&LeadBitmap, Histogram, 256, CHANNEL_RED | HIST_ALL_BITS);
   if(nRet !=SUCCESS)
      return nRet;
   /* Initialize the darkest and brightest index values */
   nDarkest = 0;
   nBrightest = 0;
   /* Find the brightest and darkest intensities in the histogram */
   for(nIndex = 0; nIndex < 256; nIndex++)
   {
       if (Histogram[nIndex] != 0)
       {
           nBrightest = nIndex;
           if (nDarkest == 0)
              nDarkest = nIndex;
       }
   }
   /* Display the values in a message box */
   wsprintf (szMessage, TEXT("Darkest red = %d;  Brightest red = %d"), nDarkest, nBrightest);
   MessageBox (NULL, szMessage, TEXT("Notice"), MB_OK);
   if(LeadBitmap.Flags.Allocated)  
      L_FreeBitmap(&LeadBitmap);  
   return SUCCESS;
}