예제 #1
0
        private void load_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog browser = new FolderBrowserDialog();

            browser.SelectedPath = Application.StartupPath;
            if (browser.ShowDialog() == DialogResult.OK)
            {
                var dirs = Directory.GetDirectories(browser.SelectedPath).OrderBy(d => int.Parse(Path.GetFileName(d))).ToArray();
                volumes = new List <DiVolume>();
                images  = new byte[dirs.Count()][, , ];

                int counter = 0;
                foreach (var dir in dirs)
                {
                    var data = DiVolume.LoadFrom(dir);

                    images[counter]  = data;
                    byte[,,] newdata = data;
                    switch (useFilter)
                    {
                    case 0:
                        newdata = Filter.GaussianFilter(data, false);
                        break;

                    case 1:
                        newdata = Filter.MeanFilter(data, false);
                        break;

                    case 2:
                        newdata = Filter.MedianFilter(data, false);
                        break;

                    case 3:
                        newdata = Filter.BilateralFilter(data, false);
                        break;

                    case 4:
                        newdata = Filter.PrewittFilter(data);
                        break;

                    case 5:
                        newdata = Filter.SobelFilter(data);
                        break;

                    case 6:
                        newdata = Filter.RobertsFilter(data);
                        break;

                    case 7:
                        newdata = Filter.LoGFilter(data);
                        break;

                    case 8:
                        newdata = Filter.GaussianFilter(data, true);
                        break;

                    case 9:
                        newdata = Filter.MeanFilter(data, true);
                        break;

                    case 10:
                        newdata = Filter.MedianFilter(data, true);
                        break;

                    case 11:
                        newdata = Filter.BilateralFilter(data, true);
                        break;

                    case 12:
                        newdata = Filter.CotrastSt(data);
                        break;

                    case 13:
                        newdata = Filter.HistogramEqualization(data);
                        break;

                    default:
                        break;
                    }
                    var volume = new DiVolume(newdata);

                    //if (counter == 0)
                    //{
                    float limit;
                    float[,,] edge = Edge(newdata, out limit);

                    StreamWriter bw = new StreamWriter("pointCloud" + counter + ".xyz");

                    for (int pz = 0; pz < edge.GetLength(0); pz++)
                    {
                        for (int py = 0; py < edge.GetLength(1); py++)
                        {
                            for (int px = 0; px < edge.GetLength(2); px++)
                            {
                                var a = pz;
                                if (edge[pz, py, px] > limit)
                                {
                                    bw.WriteLine(a + " " + py + " " + px);
                                }
                            }
                        }
                    }
                    bw.Close();
                    //}

                    volumes.Add(volume);

                    vWidth  = volume.Cols;
                    vHeight = volume.Rows;
                    vSlices = volume.Slices;

                    SetStage("Loading...", (++counter) / (float)dirs.Length);
                }

                sliceXY = new Bitmap(vWidth, vHeight);
                sliceXZ = new Bitmap(vWidth, vSlices);
                sliceYZ = new Bitmap(vSlices, vHeight);

                SetCursorAt(vWidth / 2, vHeight / 2, vSlices / 2);

                selector.Minimum = 0;
                selector.Maximum = volumes.Count - 1;
                selector.Value   = 0;

                SelectImage(0);
            }
        }
        private void load_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog browser = new FolderBrowserDialog();

            browser.SelectedPath = Application.StartupPath;
            if (browser.ShowDialog() == DialogResult.OK)
            {
                var dirs = Directory.GetDirectories(browser.SelectedPath).OrderBy(d => int.Parse(Path.GetFileName(d))).ToArray();
                volumes = new List <DiVolume>();
                images  = new byte[dirs.Count()][, , ];

                int counter = 0;
                foreach (var dir in dirs)
                {
                    var data = DiVolume.LoadFrom(dir);
                    images[counter]  = data;
                    byte[,,] newdata = data;
                    switch (useFilter)
                    {
                    case 0:
                        newdata = Filter.GaussianFilter(data, false);
                        break;

                    case 1:
                        newdata = Filter.MeanFilter(data, false);
                        break;

                    case 2:
                        newdata = Filter.MedianFilter(data, false);
                        break;

                    case 3:
                        newdata = Filter.BilateralFilter(data, false);
                        break;

                    case 4:
                        newdata = Filter.PrewittFilter(data);
                        break;

                    case 5:
                        newdata = Filter.SobelFilter(data);
                        break;

                    case 6:
                        newdata = Filter.RobertsFilter(data);
                        break;

                    case 7:
                        newdata = Filter.LoGFilter(data);
                        break;

                    case 8:
                        newdata = Filter.GaussianFilter(data, true);
                        break;

                    case 9:
                        newdata = Filter.MeanFilter(data, true);
                        break;

                    case 10:
                        newdata = Filter.MedianFilter(data, true);
                        break;

                    case 11:
                        newdata = Filter.BilateralFilter(data, true);
                        break;

                    case 12:
                        newdata = Filter.CotrastSt(data);
                        break;

                    case 13:
                        newdata = Filter.HistogramEqualization(data);
                        break;

                    default:
                        break;
                    }
                    var volume = new DiVolume(newdata);

                    volumes.Add(volume);

                    vWidth  = volume.Cols;
                    vHeight = volume.Rows;
                    vSlices = volume.Slices;

                    SetStage("Loading...", (++counter) / (float)dirs.Length);
                }

                sliceXY = new Bitmap(vWidth, vHeight);
                sliceXZ = new Bitmap(vWidth, vSlices);
                sliceYZ = new Bitmap(vSlices, vHeight);

                SetCursorAt(vWidth / 2, vHeight / 2, vSlices / 2);

                selector.Minimum = 0;
                selector.Maximum = volumes.Count - 1;
                selector.Value   = 0;

                SelectImage(0);
            }
        }