private void SetupKmeans() { Kmeans.OnClassify += Kmeans_OnClassify; //Initial view if null if (KmeansTrainedDataViews == null) { KmeansTrainedDataViews = new List <KmeansTrainedDataView>(); for (int i = 0; i < Kmeans.GetTrainResult().Count; i++) { var view = new KmeansTrainedDataView(); KmeansTrainedDataViews.Add(view); KmeansTrainedData_flowPanel.Controls.Add(view); } } //Refresh view var DataViewsEnum = KmeansTrainedDataViews.GetEnumerator(); foreach (RawImage28x28 TrainResult in Kmeans.GetTrainResult()) { if (DataViewsEnum.MoveNext()) { var CurrentView = DataViewsEnum.Current; CurrentView.SetValue(TrainResult.ToBitmap(), TrainResult.Tag, 0); } } }
//Refresh results private void Kmeans_OnClassify(RawImage28x28 NewNode, IEnumerable <RawImage28x28> OrderedCenter, string MostTag) { Image OldBitmap = KmeansResultPictureBox.Image; KmeansResultPictureBox.Image = OrderedCenter.First().ToBitmap(); KmeansResultNum_Label.Text = MostTag; var TrainResultsEnumerator = OrderedCenter.GetEnumerator(); foreach (var KmeansTrainedDataView in KmeansTrainedDataViews) { if (TrainResultsEnumerator.MoveNext()) { var TrainResult = TrainResultsEnumerator.Current; KmeansTrainedDataView.SetValue(TrainResult.ToBitmap(), TrainResult.Tag, TrainResult.GetEuclideanDistance(NewNode)); } } OldBitmap?.Dispose(); }