OpenCVSharp4で濃度変換(線形濃度変換、ガンマ補正、ヒストグラム平滑化)

手順

  1. VisualStudioにOpenCVSharp4とOpenCVSharp4.runtime.winをインストール
  2. 下記のプログラムを実行
using System;  
using OpenCvSharp;  

namespace 濃度変換 {  
    class Program {  
        static void Main(string[] args) {  
            Mat src = new Mat(@"D:\2ff84d3c.jpg");//画像の読み込み  
            Cv2.CvtColor(src, src, ColorConversionCodes.RGB2GRAY);//読み込んだ画像のグレースケール化  

            Mat linearImg = new Mat(), gammaImg = new Mat(), equalizeHistImg = new Mat();  


            //線形変換は演算子そのままで記述  
            double a = 1.2, k = -0.3;  
            linearImg = src*a + k*255;  


            //ガンマ補正はルックアップテーブルを使うと楽  
            double gamma = 2.0;  

            sbyte[] lut = new sbyte[256];  
            for(int i = 0; i <= 255; i++) lut[i] = (sbyte)(Math.Pow((double)i / 255.0, 1 / gamma) * 255.0);  
            Mat lutMat = new Mat(1, 256, MatType.CV_8UC1, lut);  

            Cv2.LUT(src, lutMat, gammaImg);  


            //ヒストグラム平滑化は短く書ける  
            Cv2.EqualizeHist(src, equalizeHistImg);  


            //画像の表示  
            Cv2.ImShow("src"          , src);  
            Cv2.ImShow("linear"       , linearImg);  
            Cv2.ImShow("gamma"        , gammaImg);  
            Cv2.ImShow("equalize hist", equalizeHistImg);  

            Cv2.WaitKey();  
        }  
    }  
}  

参考

https://imagingsolution.net/program/opencv/gamma-correction/
https://algorithm.joho.info/programming/image-processing/