private void Classify_btn_Click(object sender, EventArgs e) { using (Bitmap ResizedInput = new Bitmap(InputPictureBox.Image, 28, 28)) { RawImage28x28 NewInput = new RawImage28x28(ResizedInput, null); NewInput.Print(); Knn?.Classify(Convert.ToInt32(Knn_KValue_Textbox.Text), NewInput); Kmeans?.Classify(NewInput); } }
//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(); }
private void Knn_OnClassify(RawImage28x28 NewNode, IEnumerable <RawImage28x28> ClosestKPoints, string MostTag, IEnumerable <RawImage28x28> ClassifiedNodes) { Image OldBitmap = KnnResultPictureBox.Image; KnnResultPictureBox.Image = ClosestKPoints.First().ToBitmap(); KnnResultNum_Label.Text = MostTag; StringBuilder sb = new StringBuilder(); var OrderTags = ClosestKPoints.GroupBy(x => x.Tag).OrderByDescending(group => group.Count()); foreach (var OrderedTag in OrderTags) { sb.Append("Tag:"); sb.Append(OrderedTag.Key); sb.Append("\tCount:"); sb.AppendLine(OrderedTag.Count().ToString()); } ClosestKCount_RichTextbox.Text = sb.ToString(); OldBitmap?.Dispose(); }
public static RawImage28x28[] LoadData(string pixelFilePath, string labelFilePath) { int numImages = 60000; RawImage28x28[] result = new RawImage28x28[numImages]; FileStream ifsPixels = new FileStream(pixelFilePath, FileMode.Open); FileStream ifsLabels = new FileStream(labelFilePath, FileMode.Open); BinaryReader brImages = new BinaryReader(ifsPixels); BinaryReader brLabels = new BinaryReader(ifsLabels); int magic1 = brImages.ReadInt32(); // stored as Big Endian magic1 = ReverseBytes(magic1); // convert to Intel format int imageCount = brImages.ReadInt32(); imageCount = ReverseBytes(imageCount); int numRows = brImages.ReadInt32(); numRows = ReverseBytes(numRows); int numCols = brImages.ReadInt32(); numCols = ReverseBytes(numCols); int magic2 = brLabels.ReadInt32(); magic2 = ReverseBytes(magic2); int numLabels = brLabels.ReadInt32(); numLabels = ReverseBytes(numLabels); byte[] pixels = new byte[RawImage28x28.Height * RawImage28x28.Width]; // each image for (int di = 0; di < numImages; ++di) { int cnt = 0; for (int i = 0; i < 28; ++i) // get 28x28 pixel values { for (int j = 0; j < 28; ++j) { int b = brImages.ReadByte(); pixels[cnt++] = Convert.ToByte((b > 0 ? 255 : 0)); } } byte lbl = brLabels.ReadByte(); // get the label RawImage28x28 dImage = new RawImage28x28(pixels, lbl.ToString()); result[di] = dImage; } // each image ifsPixels.Close(); brImages.Close(); ifsLabels.Close(); brLabels.Close(); return(result); } // LoadData