Beispiel #1
0
        private void KNN_Button_Click(object sender, RoutedEventArgs e)
        {
            imgrid.Source = null;
            KNN knn = new KNN();

            List <GistData> trainSamples = new List <GistData>();
            List <GistData> testSamples  = new List <GistData>();
            List <GistData> trainClasses = new List <GistData>();

            int fakeSimilar = 0;

            foreach (var item in globalgistdatalist)
            {
                if (fakeSimilar % 3 == 2)
                {
                    item.IsSimilar = 0;   //no comment, will go to testSamples
                }
                else if (fakeSimilar % 3 == 1)
                {
                    item.IsSimilar = 1;  //like, Will go to trainSamples
                }
                else if (fakeSimilar % 3 == 0)
                {
                    item.IsSimilar = -1;  //dislike, Will go to trainSamples
                }
                Console.WriteLine("Before KNN: " + item.filename + " " + item.IsSimilar);

                fakeSimilar++;

                if (item.IsSimilar == 0)
                {
                    testSamples.Add(item);
                }
                else
                {
                    trainSamples.Add(item);
                }
            }


            trainClasses = knn.TestKnnCase(trainSamples, testSamples, 3, 0.5);
            globalgistdatalist.Clear();
            globalgistdatalist.AddRange(trainClasses);
            globalgistdatalist.AddRange(trainSamples);
            Console.WriteLine(globalgistdatalist.Count());

            //sp1.Children.Clear();
            lv1.Items.Clear();

            globalgistdatalist = globalgistdatalist.OrderByDescending(o => o.IsSimilar).ThenBy(o => o.distance).ToList();

            //Now load the files in the stack panel
            for (int j = 0; j < globalgistdatalist.Count; j++)
            {
                if (j > 0)
                {
                    if (globalgistdatalist[j].filename == globalgistdatalist[j - 1].filename && globalgistdatalist[j].distance == globalgistdatalist[j - 1].distance)
                    {
                        continue;
                    }
                }

                Image img = new Image();

                BitmapImage source = new BitmapImage();
                source.BeginInit();
                source.UriSource         = new Uri(globalgistdatalist[j].filename, UriKind.Relative);
                source.CacheOption       = BitmapCacheOption.OnLoad;
                source.DecodePixelWidth  = 200;
                source.DecodePixelHeight = 200;
                source.EndInit();
                img.Source  = source;
                img.Stretch = Stretch.Uniform;
                int qq = source.PixelHeight;        // Image loads here
                System.Windows.Controls.ToolTip tooltip = new System.Windows.Controls.ToolTip();
                tooltip.Content = globalgistdatalist[j].metadata;
                img.ToolTip     = tooltip;
                //sp1.Children.Add(img);



                System.Windows.Controls.RadioButton radio1like    = new System.Windows.Controls.RadioButton();
                System.Windows.Controls.RadioButton radio2dislike = new System.Windows.Controls.RadioButton();
                radio1like.VerticalAlignment      = VerticalAlignment.Bottom;
                radio1like.Content                = "Yes";
                radio2dislike.VerticalAlignment   = VerticalAlignment.Bottom;
                radio2dislike.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
                radio2dislike.Content             = "No";
                var grid = new Grid();
                grid.Children.Add(img);
                grid.Children.Add(radio1like);
                grid.Children.Add(radio2dislike);
                lv1.Items.Add(grid);

                //if (checkbox.IsChecked == true)
                //{
                //    globalgistdatalist[j].IsSimilar = 1;
                //    imgrid.Source = source;
                //}
                //else
                //    globalgistdatalist[j].IsSimilar = -1;

                if (radio1like.IsChecked == true)
                {
                    globalgistdatalist[j].IsSimilar = 1;
                }
                else if (radio2dislike.IsChecked == true)
                {
                    globalgistdatalist[j].IsSimilar = -1;
                }


                Console.WriteLine("After KNN: " + globalgistdatalist[j].filename + " " + globalgistdatalist[j].IsSimilar + " distance :" + globalgistdatalist[j].distance);
            }

            lv1.Items.Refresh();
        }