ガンマ補正(ガンマ補正とも呼ば)ガンマ非線形(ガンマiinearity )、ガンマ符号化(ガンマ符号化)、または単にガンマ(ガンマ)と呼ばれることができます。これは、映像や光システムのために使用される輝度非線形または抗演算実行(輝度)又は三刺激値(三刺激値)。
ウィキペディア
1、公式
Aは定数であり、入力と出力の値が負でない実数値です。一般にA = 1の一般的に言えば、入力値と出力値の範囲は0と1の間です。ガンマ値γを時々呼ば<1の値γ(ガンマをコードする)符号化され、上記符号化処理を用いて行われるべき乗則プロセスのも呼ばれるガンマ圧縮(圧縮ガンマ)、コントラスト、ガンマ値γを> 1は時々も呼ばれる復号化されたガンマ値(復号ガンマ)、使用して実行され、上述した復号動作べき乗則プロセスのは、「拡張ガンマ(ガンマ拡張)」と呼ばれています。
2、通訳
3.詳細
1.ガンマカーブ補正とは何ですか?
ガンマ補正曲線それは何を意味するのでしょうか?ガンマカーブは、1に等しいガンマ値、曲線が同一の入力及び出力密度を参照する。このとき、45°の直線と座標軸である場合、特別なトーンカーブです。1より大きいガンマ値は、暗出力の原因となる照明の出力、ガンマ値が1未満になります。結論として、我々の要求が近い可能な限り1への入力と出力の比率です。モニタ、スキャナ、プリンタ、入出力デバイスでは、これはかなり一般的で重要な概念です。コンピュータシステムにおいて、原因実際の出力の表示にグラフィックス又は画像は明るさにずれてしまう、ガンマカーブの補正方法は、何らかの方法でこの画像のずれを補正することです。ガンマ補正の値が1よりも小さい場合にガンマ補正の値が1より大きい場合、一般に、画像のハイライト部分が圧縮され、暗い部分が拡張され、画像のハイライト部分が、展開され、暗い部分が圧縮されます一般的な詳細スムーズな拡張暗いトーンのためのガンマ補正。
2、ガンマ補正コード
1の#include <opencv2 /コア/ core.hpp> 2の#include <opencv2 / imgproc / imgproc.hpp> 3の#include <opencv2 / imgproc / types_c.h> 4の#include <opencv2 /のHighGUI / highgui.hpp> 5# <opencv2 /のHighGUI / highgui_c.h>含む 6の#include <opencv2 / highgui.hpp> 7の#include <opencv2 / calib3d.hpp> 8の#include <iostreamの> 9 10 使って名前空間品種; 11 使って名前空間はstdを、 12 13 ボイドガンマ補正(マット&SRC、マット&DST、 { 15 符号なしチャー LUT [ 256 ]。 16 のためには、(int型 iは= 0 ; iは< 256 ; iは++ ) 17 { 18 LUT [I] = saturate_cast <UCHAR>(POW((フロート)(I / 255.0)、fGamma)* 255.0f )。 19 } 20 21 DST = src.clone()。 22 のconst int型のチャネル= dst.channels()。 23 スイッチ(チャネル) 24 { 25 ケース 1 : 26 { 27 28 MatIterator_ <UCHAR> こと、エンド。 29 のためには、(それが= dst.begin <UCHAR>()、終了= dst.end <UCHAR>();!それ= END;それ++ ) 30 がLUTの= * [する(* IT)]。 31 32 休憩。 33 } 34 ケース3 : 35 { 36 37 MatIterator_ <Vec3b> こと、エンド。 38 については、(それが= dst.begin <Vec3b>()、終了= dst.end <Vec3b>();!それ=終わり、それ++ ) 39 { 40 (※)[ 0 ] LUT [((※)[= 0 ])]。 41 (※)[ 1 ] LUTを= [((※)[ 1 ])]。 42 (※)[ 2 ] LUTを= [((※)[ 2 ])]。 43 } 44 45 ブレーク。 46 47 } 48 デフォルト: 49 休憩。 50 } 51 } 52 53 INT メイン() 54 { 55 マット画像=関数imread(" D://Images/wrong/2.jpg " )。 56 であれば(image.empty()) 57 { 58 COUT << " エラー:イメージをロードできませんでした" << ENDL。 59 リターン 0 ; 60 } 61 マットDST。 62 フロート fGamma = 1 / 1.8 。 63 ガンマ補正(画像、DST、fGamma)。 64 関数imwrite(" D://Images/wrong/24.jpg " 、DST)。 65 waitKey()。 66 67 リターン0 ; 68 }
1 パッケージorg.jaiken.tools。 2 3 インポートorg.opencv.core.Core。 4 インポートorg.opencv.core.CvType。 5 輸入org.opencv.core.Mat。 6 インポートorg.opencv.imgcodecs.Imgcodecs。 7 8 パブリッククラスガンマ補正{ 9 // 伽马校正10 公衆マットガンマ(マットSRC){ 11 マットX = 新しいマット()。 12 src.convertTo(X、CvType.CV_32FC3)。 13 マットI = 新しいマット()。 14 15 Core.pow(X、1 / 1.8 、I)。 16 マットDST = 新しいマット()。 17 // 归一化 18 Core.normalize(I、DST、0、255、Core.NORM_MINMAX、0 ); 19 Imgcodecs.imwrite( "D://Images/wrong/22.jpg" 、DST)。 20 リターンDST。 21 } 22 23 公共静的ボイドメイン(文字列[]引数){ 24 は、System.load( "D://Export/opencv_java320.dll" )。 25 マットSRC = Imgcodecs.imread( "D://Images/wrong/2.jpg"、0 ); 26 であれば(src.empty()){ 27 System.err.println( "ピクチャが存在しません" )。 28 リターン; 29 } 30 ガンマ補正ガンマ補正= 新しいガンマ補正()。 31 gammaCorrection.gamma(SRC)。 32 } 33 34 }
レンダリング
これはまたのみ、画像の明るさの変化を参照して詳細に変更を経験していない、閾値と、このような方法と二つの像ブロブ分析、図の以下の結果を検出することができます。
明らかにかなりの結果より、より明確に4列、画像の細部の5行目の結果が、画像上の干渉「ライン」は存在しません。