/*	
 *	clipimg.h
 *
 *	ユーティリティ：画像処理
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2016 Naoyuki Sawa
 *
 *	* Sun Sep 06 23:32:49 JST 2015 Naoyuki Sawa
 *	- 1st リリース。
 *	- discriminant_analysis()を作成しました。
 *	* Mon Sep 07 22:07:58 JST 2015 Naoyuki Sawa
 *	- image_labeling()を追加しました。
 *	* Sun Sep 20 18:19:03 JST 2015 Naoyuki Sawa
 *	- discriminant_analysis()の処理の一部を、32ビット整数処理⇒実数処理に変更しました。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 *	* Sat Dec 17 21:25:03 JST 2016 Naoyuki Sawa
 *	- k_means_clustering_init(),k_means_clustering_init_r(),k_means_clustering_step(),k_means_clustering_step_r()を追加しました。
 *	* Sun Dec 25 21:14:35 JST 2016 Naoyuki Sawa
 *	- 動的メモリ割り当てを使って、速度を改善したバージョンの、k_means_clustering_init_r()を実装しました。
 */
#ifndef __CLIP_IMG_H__
#define __CLIP_IMG_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/*****************************************************************************
 *	判別分析法(大津の二値化)
 *****************************************************************************/
int discriminant_analysis(const uint8_t* p, int n);
/****************************************************************************
 *	ラベリング処理
 ****************************************************************************/
int image_labeling(const uint8_t* image/*[w*h]*/, int w, int h, uint16_t* label/*[w*h]*/, int diag/*0=4近傍,1=8近傍*/, uint16_t* parents/*[parents_max]*/, int parents_max);
/*****************************************************************************
 *	k-means法,及び,k-means++法によるクラスタリング処理
 *****************************************************************************/
int k_means_clustering_init(  const void* vector/*[width*n]*/, size_t _n, const void* center/*[width*k]*/, size_t _k, int label[/*n*/], size_t width, double (*distance)(const void* vector, const void* center           )           );
int k_means_clustering_init_r(const void* vector/*[width*n]*/, size_t _n, const void* center/*[width*k]*/, size_t _k, int label[/*n*/], size_t width, double (*distance)(const void* vector, const void* center, void* arg), void* arg);
int k_means_clustering_step(  const void* vector/*[width*n]*/, size_t _n, const void* center/*[width*k]*/, size_t _k, int label[/*n*/], size_t width, double (*distance)(const void* vector, const void* center           )           );
int k_means_clustering_step_r(const void* vector/*[width*n]*/, size_t _n, const void* center/*[width*k]*/, size_t _k, int label[/*n*/], size_t width, double (*distance)(const void* vector, const void* center, void* arg), void* arg);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_IMG_H__
