Newer
Older
opticalFlowProcessing / opticalFlowProcessing / ImageProcessor.h
#pragma once
#include "myOpenCV3.h"
#include <chrono>
class ImageProcessor {
public:
    // コンストラクタで入力画像を受け取る
    void inputProcess(const cv::Mat& inputImage);
    // 画像処理を実行するメソッド
    void applyCLAHEProcess();
    void applyGaborProcess();
    void applyAllProcess();
    void setCLAHETile(int CLAHETileSize);
    void setCLAHEClipLimit(double CLAHEClipLimit);
    // 各処理後の画像を取得するためのgetterメソッド
    cv::Mat getOriginalImage() const;
    cv::Mat getCLAHEImage() const;
    cv::Mat getGaborImage() const;
    cv::Mat getBinaryImage() const;
    cv::Mat getSmallRegionRemovedImage() const;
    cv::Mat getThinnedImage() const;
    cv::Mat getCircleImage() const;
    std::vector<cv::Point> getBranchPoints() const;

private:
    cv::Mat m_originalImage;
    cv::Mat m_maskAreaImage;
    cv::Mat m_distanceMap;
    cv::Mat m_maskOriginalImage;
    cv::Mat m_claheImage;
    cv::Mat m_gaborImage;
    cv::Mat m_binaryImage;
    cv::Mat m_smallRegionRemovedImage;
    cv::Mat m_thinnedImage;
    cv::Mat m_circleImage;
    std::vector<cv::Point> m_branchPoints;
    int m_CLAHETileSize = 17;
    double m_CLAHEClipLimit = 10.0;

    // 各種画像処理関数
    // その他のヘルパー関数

    void removeSmallArea(const cv::Mat& binaryImage, cv::Mat& smallRegionRemovedImage, double areaThreshold);
    void thinning(const cv::Mat& smallRegionRemovedImage, cv::Mat& thinnedImage);
    void thinningIteration(cv::Mat& smallRegionRemovedImage, int iteration);
    std::vector<cv::Point> extractBifurcationPoints(const cv::Mat& thinnedImage, const cv::Mat& distanceMap, int borderSize, float minDistance);
    std::vector<cv::Point> extractStrictBifurcationPoints(const cv::Mat& thinnedImage, int borderSize);
    std::vector<cv::Point> extractDistanceMapBifurcationPoints(const cv::Mat& thinnedImage, const cv::Mat& distanceMap, int borderSize, float minDistance);
    
    // その他の画像処理関数
};

void visualizeBranchLengthMap(const     std::vector<std::vector<int>>& branchLengthMap);
cv::Mat inverseImage(const cv::Mat& src);
cv::Mat maximumImage(const cv::Mat& src1, const cv::Mat& src2);