| |
| |
|
|
| |
| |
| |
| #if !defined(AFX_SDIRECTION_H__C672AFF1_1A65_11D6_B99E_0040F674BE6A__INCLUDED_) |
| #define AFX_SDIRECTION_H__C672AFF1_1A65_11D6_B99E_0040F674BE6A__INCLUDED_ |
| |
| #if _MSC_VER > 1000 |
| #pragma once |
| #endif |
| |
| #include "SDef.h" |
| |
| #include <memory> |
| #include <array> |
| #include <vector> |
| |
| using namespace std; |
| |
| |
| |
| typedef struct { |
| char val; |
| UCHAR dir; |
| } SVD; |
| |
| #define NBDIR 4 |
| |
| class CSDirection |
| { |
| int m_lX, m_lY; |
| std::unique_ptr<UCHAR[]> m_dir; |
| std::array<std::unique_ptr<SXYW[]>, NBDIR> m_df; |
| int m_lDf; |
| |
| void null(); |
| void makeDir(UCHAR *sel); |
| UCHAR getDir(const int xx, const int yy, UCHAR *sel); |
| void makeDirFilter(const int sens); |
| UCHAR equalizeDir_GTE50(UCHAR *sel, const int xx, const int yy, const int d); |
| UCHAR equalizeDir_LT50(UCHAR *sel, const int xx, const int yy, const int d); |
| void equalizeDir(UCHAR *sel, const int d); |
| double adjustAngle(const short sum[4], const int Ima, |
| const int Im45, const int Ip45); |
| double getAngle(const short sum[4], short ma); |
| UCHAR blurRadius(UCHAR *sel, const int xx, const int yy, const int dBlur); |
| void blurRadius(const int dBlur); |
| void setDir01(); |
| bool isContourBorder(const int xx, const int yy, const int border); |
| void setContourBorder(const int border); |
| |
| public: |
| CSDirection(); |
| CSDirection(const int lX, const int lY, const UCHAR *sel, const int sens); |
| CSDirection(const int lX, const int lY, const UCHAR *sel, const int sens, const int border); |
| virtual ~CSDirection(); |
| |
| void doDir(); |
| void doRadius(const double rH, const double rLR, |
| const double rV, const double rRL, const int dBlur); |
| void getResult(UCHAR *sel); |
| }; |
| |
| #endif |
| |