Esempio n. 1
0
        protected override void OnValidate(Image3D image)
        {
            base.OnValidate(image);

            Window.MaxIntensity = image.Maximum;
            Window.MinIntensity = image.Minimum;
        }
Esempio n. 2
0
        protected override void OnValidate(Image3D image)
        {
            if (image.LengthZ != 1) { throw new LogException("can only render Images with exactly one slice"); }

            Window.MaxIntensity = image.Maximum;
            Window.MinIntensity = image.Minimum;
        }
Esempio n. 3
0
        protected override void OnRenderPixel(Image3D image, DisplayImage display, int x, int y)
        {
            double mipValue = double.MinValue;
            for (int z = image.LengthZ - 1; z >= 0; z--)
            {
                mipValue = Math.Max(mipValue, image[x, y, z]);
            }

            display.SetPixel(x, y, Window.GetColor(mipValue));
        }
Esempio n. 4
0
        protected override void OnRenderPixel(Image3D image, DisplayImage display, int x, int y)
        {
            var voxelColor = Colors.Black;
            for (int z = image.LengthZ - 1; z >= 0; z--)
            {
                var color = tf.GetColor(image[x, y, z]);
                voxelColor = ColorHelper.BlendAlpha(color, voxelColor);
            }

            display.SetPixel(x, y, voxelColor);
        }
Esempio n. 5
0
 protected override Image3D OnProcess(Image3D image, Progress progress)
 {
     if (activated)
     {
         return base.OnProcess(image, progress);
     }
     else
     {
         progress.Done();
         return image;
     }
 }
Esempio n. 6
0
        public void UpdateImageSize(int x, int y)
        {
            if (x == 0 || y == 0)
            {
                return;
            }
            Image1D?.Dispose();
            Image1D = new EditBitmap(x, y, PixelFormats.Bgr24);
            Image2D?.Dispose();
            Image2D = new EditBitmap(x, y, PixelFormats.Bgr24);
            Image3D?.Dispose();
            Image3D = new EditBitmap(x, y, PixelFormats.Bgr24);

            Redraw();
        }
Esempio n. 7
0
        protected override Image3D OnProcess(Image3D image, Progress progress)
        {
            if (activated)
            {
                if (image.LengthX < 3 || image.LengthY < 3 || image.LengthZ < 3)
                {
                    throw new LogException("3D Filter need 3 slices minimum");
                }

                return base.OnProcess(image, progress);
            }
            else
            {
                progress.Done();
                return image;
            }
        }
Esempio n. 8
0
 public void FromImage(Image3D image)
 {
     if (image.LengthZ <= 25)
     {
         // full image
         for (int z = 0; z < image.LengthZ; z++)
         {
             HistogramFromSlice(image, z);
         }
     }
     else
     {
         int delta = image.LengthZ / 25;
         // from 25 slices
         for (int z = 0; z < image.LengthZ; z += delta)
         {
             HistogramFromSlice(image, z);
         }
     }
 }
Esempio n. 9
0
        public double FilterPixel(int x, int y, int z, Image3D image)
        {
            if (Activated)
            {
                double[,] area = image.GetArea(x, y, z, xCount, yCount);

                double sum = 0;
                for (int i = 0; i < yCount; i++)
                {
                    for (int j = 0; j < xCount; j++)
                    {
                        sum += area[j, i] * filter[j, i];
                    }
                }

                return sum / divider;
            }

            return image[x, y, z];
        }
Esempio n. 10
0
        public NSBTX(File f)
        {
            this.f = f;

            data = f.getContents();
            str  = new ByteArrayInputStream(data);

            //look for TEX0 block
            //ugly, but i'm lazy to implement it properly.
            bool found      = false;
            int  blockStart = 0;

            while (str.lengthAvailable(4))
            {
                uint v = str.readUInt();
                if (v == 0x30584554) // "TEX0"
                {
                    str.setOrigin(str.getPos() - 4);
                    blockStart = (int)(str.getPos() - 4);
                    found      = true;
                    break;
                }
//                else
//                    str.skipback(3); //just in case its not word-aligned
            }
            str.seek(0);
            if (!found)
            {
                textures = new PalettedImage[0];
                palettes = new PaletteDef[0];
                MessageBox.Show("This model file doesn't contain any valid texture data.", "NSMBe5.3", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            Console.Out.WriteLine("\n");
            //Read stuff
            str.seek(0x14);
            texDataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("Texdata " + texDataOffset.ToString("X8"));

            str.seek(0x24);
            f5texDataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("f5Texdata " + f5texDataOffset.ToString("X8"));
            f5dataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("f5data " + f5dataOffset.ToString("X8"));

            str.seek(0x30);
            palDataSize = str.readInt() * 8;
            Console.Out.WriteLine("paldata size " + palDataSize.ToString("X8"));
            str.seek(0x34);
            palDefOffset = str.readInt();
            Console.Out.WriteLine("paldef " + palDefOffset.ToString("X8"));
            palDataOffset = str.readInt();
            Console.Out.WriteLine("paldata " + palDataOffset.ToString("X8"));

            //Read texture definitions
            str.seek(0x3D);
            textures = new PalettedImage[str.readByte()];
            str.skip((uint)(0xE + textures.Length * 4));

            ImageManagerWindow mgr = new ImageManagerWindow();

            mgr.Text = string.Format(LanguageManager.Get("ImageManager", "textureTitle"), f.name);

            bool hasFormat5 = false;

            for (int i = 0; i < textures.Length; i++)
            {
                int    offset = 8 * str.readUShort();
                ushort param  = str.readUShort();
                int    format = (param >> 10) & 7;

                if (format == 5)
                {
                    offset += f5texDataOffset;
                }
                else
                {
                    offset += texDataOffset;
                }

                int  width  = 8 << ((param >> 4) & 7);
                int  height = 8 << ((param >> 7) & 7);
                bool color0 = ((param >> 13) & 1) != 0;
                str.readUInt(); // unused

                int size = width * height * Image3D.bpps[format] / 8;
                //Console.Out.WriteLine(offset.ToString("X8") + " " + format + " " + width + "x" + height + " " + color0 + " LZ");

                InlineFile mainfile = new InlineFile(f, offset, size, Image3D.formatNames[format]);
                if (format == 5)
                {
                    hasFormat5 = true;
                    int        f5size = (width * height) / 16 * 2;
                    InlineFile f5file = new InlineFile(f, f5dataOffset, f5size, Image3D.formatNames[format]);

                    f5dataOffset += f5size;
                    textures[i]   = new Image3Dformat5(mainfile, f5file, width, height);
                }
                else
                {
                    textures[i] = new Image3D(mainfile, color0, width, height, format);
                }

//                textures[i] = new Texture(this, color0, width, height, format, offset, "");

/*                if (format == 5)
 *              {
 *                  textures[i].f5DataOffset = f5dataOffset;
 *                  f5dataOffset += (uint)(width * height) / 16 * 2;
 *              }*/
            }

            for (int i = 0; i < textures.Length; i++)
            {
                if (textures[i] == null)
                {
                    continue;
                }
                textures[i].name = str.ReadString(16);
                mgr.m.addImage(textures[i]);
            }



            //Read palette definitions
            str.seek(palDefOffset + 1);
            palettes = new PaletteDef[str.readByte()];
            str.skip((uint)(0xE + palettes.Length * 4));

            for (int i = 0; i < palettes.Length; i++)
            {
                int offset = 8 * str.readUShort() + palDataOffset + blockStart;
                str.readUShort();
                palettes[i]      = new PaletteDef();
                palettes[i].offs = offset;
            }

            Array.Sort(palettes);

            for (int i = 0; i < palettes.Length; i++)
            {
                palettes[i].name = str.ReadString(16);
                if (i != palettes.Length - 1)
                {
                    palettes[i].size = palettes[i + 1].offs - palettes[i].offs;
                }
            }
            palettes[palettes.Length - 1].size = blockStart + palDataOffset + palDataSize - palettes[palettes.Length - 1].offs;

            for (int i = 0; i < palettes.Length; i++)
            {
                if (hasFormat5)
                {
                    FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs, palettes[i].size, palettes[i].name));
                    mgr.m.addPalette(pa);
                }
                else
                {
                    int extrapalcount = (palettes[i].size) / 512;
                    for (int j = 0; j < extrapalcount; j++)
                    {
                        FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs + j * 512, 512, palettes[i].name + ":" + j));
                        mgr.m.addPalette(pa);
                    }
                    int lastsize = palettes[i].size % 512;
                    if (lastsize != 0)
                    {
                        FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs + extrapalcount * 512, lastsize, palettes[i].name + ":" + extrapalcount));
                        mgr.m.addPalette(pa);
                    }
                }
            }

            mgr.Show();

//            new ImagePreviewer(textures[0].render(palettes[0])).Show();
        }
Esempio n. 11
0
        private void createReportToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0)
            {
                return;
            }
            else
            {

                Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

                ReportWriter rw = new ReportWriter();
                rw.create("tellme.xml");
                rw.setInfo("First Report", "Don't know name", "Description", 5, 100);

                int indexesCount = indexes.Count;
                for (int i = 0; i < indexesCount; i++)
                {
                    Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));
                    rw.addThumbnailImage(TmpIm, "Test" + i, "", "essai");
                    //rw.addThumbnailImage(TmpIm, "Test"+i, TmpIm.Name, "essai");
                }
                rw.close();

            }
        }
Esempio n. 12
0
        private void CreateNewImage(int DimX, int DimY, int DimZ, int Channel, float Value)
        {
            Image3D UnitImage = new Image3D(DimX, DimY, DimZ, Channel);

            for (int TmpChannel = 0; TmpChannel < UnitImage.NumBands; TmpChannel++)
            {
                for (int ijk = 0; ijk < UnitImage.ImageSize; ijk++)
                    UnitImage.Data[TmpChannel][ijk] = Value;
            }

            //UnitImage.Name = "Unit Image";
            AddImageToHeap(UnitImage, 0);
        }
Esempio n. 13
0
        private float[] ComputeSimpleStationarity(Image3D Input, out float Std, int NumIter, int NumPoint)
        {
            float[] Table = new float[NumIter];
            float[] TmpTable = new float[NumPoint];

            Random r = new Random();
            for (int Iter = 0; Iter < NumIter; Iter++)
            {

                for (int RandIdx = 0; RandIdx < NumPoint; RandIdx++)
                {
                    TmpTable[RandIdx] = Input.Data[0][(int)r.Next(0, Input.ImageSize)];
                }

                Table[Iter] = new IM.Library.Mathematics.MathTools().Mean(TmpTable);
            }

            Std = new IM.Library.Mathematics.MathTools().Std(Table);
            return Table;
        }
Esempio n. 14
0
        private void uniformNoiseToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RequestForNoise RQuest = new RequestForNoise();
            RQuest.Text = "Uniform Noise";
            RQuest.label1.Text = "Min.";
            RQuest.label2.Text = "Max.";
            if (RQuest.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            Random r = new Random();
            float RandVal = 0.0f;
            float Range = (float)RQuest.numericUpDownGaussianNoiseStdv.Value - (float)RQuest.numericUpDownGaussianNoiseMean.Value;

            int indexesCount = indexes.Count;
            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));

                for (int Band = 0; Band < TmpIm.NumBands; Band++)
                {

                    Array.Copy(TmpIm.Data[Band], Result.Data[Band], TmpIm.ImageSize);
                    for (int idx = 0; idx < Result.ImageSize; idx++)
                    {
                        RandVal = Range * (float)r.NextDouble() + (float)RQuest.numericUpDownGaussianNoiseMean.Value;
                        Result.Data[Band][idx] += RandVal;
                    }

                }
                //Result.Name = "Sqrt result";
                AddImageToHeap(Result, 0);
            }

            indexes.Clear();
        }
Esempio n. 15
0
 protected override void OnValidate(Image3D image)
 {
     base.OnValidate(image);
     tf = tfBuilder.CreateTransferFunction();
 }
Esempio n. 16
0
 protected override void OnProcess3D(Image3D imageIn, Image3D imageOut, int x, int y, int z)
 {
     imageOut[x, y, z] = FilterPixel(x, y, z, imageIn);
 }
Esempio n. 17
0
        private void sphereToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count > 1)
            {
                MessageBox.Show("Too many images selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            FormForSphere WindowForSphere = new FormForSphere();
            WindowForSphere.numericUpDownPosX.Value = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width / 2;
            WindowForSphere.numericUpDownPosY.Value = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height / 2;
            WindowForSphere.numericUpDownPosZ.Value = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth / 2;

            if (WindowForSphere.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            double CenterX = (double)WindowForSphere.numericUpDownPosX.Value;
            double CenterY = (double)WindowForSphere.numericUpDownPosY.Value;
            double CenterZ = (double)WindowForSphere.numericUpDownPosZ.Value;
            double DistMax = (double)WindowForSphere.numericUpDownRadius.Value;
            float NewIntensity = (float)WindowForSphere.numericUpDownIntensity.Value;

            Image3D UnitImage = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width, ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height, ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth, ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            Image3D TmpIm = (Image3D)(this.listViewHeap.Items[indexes[0]].Tag);

            for (int Band = 0; Band < TmpIm.NumBands; Band++)
            {
                Array.Copy(TmpIm.Data[Band], UnitImage.Data[Band], UnitImage.ImageSize);

                for (int z = 0; z < UnitImage.Depth; z++)
                    for (int y = 0; y < UnitImage.Height; y++)
                        for (int x = 0; x < UnitImage.Width; x++)
                        {
                            double Dist = Math.Sqrt((z - CenterZ) * (z - CenterZ) + (y - CenterY) * (y - CenterY) + (x - CenterX) * (x - CenterX));
                            if (Dist < DistMax)
                                UnitImage.Data[Band][x + y * UnitImage.Width + z * UnitImage.ScanSliceSize] += NewIntensity;
                        }

            }

            AddImageToHeap(UnitImage, 0);

            indexes.Clear();
        }
Esempio n. 18
0
        private void sqrtToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            int indexesCount = indexes.Count;
            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));
                new IM.Library.Mathematics.MathTools().Pow(ref Result, TmpIm, 0.5f);
                //Result.Name = "Sqrt result";
                AddImageToHeap(Result, 0);
            }

            indexes.Clear();
        }
Esempio n. 19
0
        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;
            if (indexes.Count == 1) return;

            if (CheckDimensions() == false)
            {
                MessageBox.Show("Image dimensions do not match", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (CheckChannelCompatibility() == false)
            {
                MessageBox.Show("Number of channel does not match", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            for (int channel = 0; channel < Result.NumBands; channel++)
                Array.Copy(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Data[channel],
                    Result.Data[channel],
                    Result.ImageSize);

            int indexesCount = indexes.Count;
            for (int i = 1; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));
                new IM.Library.Mathematics.MathTools().Add(ref Result, Result, TmpIm);
            }
            // Result.Name = "Addition result";

            AddImageToHeap(Result, 0);
            indexes.Clear();
        }
Esempio n. 20
0
        private void vectorFieldToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count != 2)
            {
                MessageBox.Show("This operation requires 2 images", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            int indexesCount = indexes.Count;

            if (CheckDimensions() == false)
            {
                MessageBox.Show("Image dimensions do not match", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            request RQuest = new request();
            Control[] ButtonControl = RQuest.Controls.Find("buttonCreateGrid", false);
            ButtonControl[0].Text = "Create Field";

            if (RQuest.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            Image3D VectorField = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            new IM.Library.Tools.Drawing().VectorField2D((Image3D)(this.listViewHeap.Items[indexes[0]].Tag), 0,
                                                        (Image3D)(this.listViewHeap.Items[indexes[1]].Tag), 0,
                                                        VectorField, 0, 0.5f, (int)RQuest.numericUpDownGridSizeValue);
            Sequence NewSeq = new Sequence();
            NewSeq.Add(VectorField);
            IMGlobal.AddSequence(NewSeq, "Vector field");
        }
Esempio n. 21
0
        private string UpdateInfoPicture(Image3D ImageToProcess)
        {
            string textBoxInfoPictureText;

            if (ImageToProcess == null)
            {
                textBoxInfoPicture.Text = "No picture selected";
                textBoxImageName.Enabled = false;
                numericUpDownChannelForHisto.Enabled = false;
                radioButtonHistoTypeClassic.Enabled = false;
                radioButtonHistoTypeCumulated.Enabled = false;
                UpdateHisto(null, 0);
                return "";
            }

            textBoxImageName.Enabled = true;
            //textBoxImageName.Text = ImageToProcess.Name;
            textBoxInfoPictureText = "Width : " + ImageToProcess.Width.ToString() + "\r\n";
            textBoxInfoPictureText += "Height : " + ImageToProcess.Height.ToString() + "\r\n";
            textBoxInfoPictureText += "Depth : " + ImageToProcess.Depth.ToString() + "\r\n";
            textBoxInfoPictureText += "Number of channels : " + ImageToProcess.NumBands.ToString() + "\r\n";
            textBoxInfoPictureText += "X Scale : " + ImageToProcess.XResolution + "\r\n";
            textBoxInfoPictureText += "Y Scale : " + ImageToProcess.YResolution + "\r\n";
            textBoxInfoPictureText += "Z Scale : " + ImageToProcess.ZResolution + "\r\n";

            float TmpValue;
            for (int channel = 0; channel < ImageToProcess.NumBands; channel++)
            {
                textBoxInfoPictureText += "----------------------\r\n";

                textBoxInfoPictureText += "Channel " + channel.ToString() + "\r\n";
                float minValue = new IM.Library.Mathematics.MathTools().Min(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Min : " + minValue.ToString() + "\r\n";

                float maxValue = new IM.Library.Mathematics.MathTools().Max(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Max : " + maxValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().Mean(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Mean : " + TmpValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().Std(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Std : " + TmpValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().MAD(ImageToProcess.Data[channel], true);
                textBoxInfoPictureText += "MAD : " + TmpValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().Median(ImageToProcess.Data[channel], 0, ImageToProcess.ImageSize - 1);
                textBoxInfoPictureText += "Median : " + TmpValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().Skew(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Skewness : " + TmpValue.ToString() + "\r\n";

                TmpValue = new IM.Library.Mathematics.MathTools().Kurt(ImageToProcess.Data[channel]);
                textBoxInfoPictureText += "Kurtosis : " + TmpValue.ToString() + "\r\n";

            }

            UpdateHisto(ImageToProcess, (int)numericUpDownChannelForHisto.Value);
            textBoxInfoPicture.Text = textBoxInfoPictureText;

            return textBoxInfoPictureText;
        }
Esempio n. 22
0
        private void UpdateImageResolution()
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            int indexesCount = indexes.Count;
            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));
                TmpIm.XResolution = (double)numericUpDownXRes.Value;
                TmpIm.YResolution = (double)numericUpDownYRes.Value;
                TmpIm.ZResolution = (double)numericUpDownZRes.Value;

            }

            indexes.Clear();
        }
Esempio n. 23
0
        private void sMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            float Smoothness;
            int indexesCount = indexes.Count;

            Image3D CurrentIM = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag));

            for (int i = 0; i < indexesCount; i++)
            {
                Image3D ResIm = new Image3D(CurrentIM.Width, CurrentIM.Height, CurrentIM.Depth, CurrentIM.NumBands);

                for (int Channel = 0; Channel < CurrentIM.NumBands; Channel++)
                {
                    new IM.Library.Filtering.Focus().SML_3D(CurrentIM, Channel, ResIm, Channel, 3, true);
                }

                for (int Channel = 0; Channel < CurrentIM.NumBands; Channel++)
                {
                    float ResSML = 0.0f;
                    for (int Pix = 0; Pix < ResIm.ImageSize; Pix++)
                    {
                        ResSML += ResIm.Data[Channel][Pix];

                    }
                    Console.WriteLine("SML band " + Channel + " = " + ResSML);
                }
            }
        }
Esempio n. 24
0
        private void sightToolStripMenuItem_Click(object sender, EventArgs e)
        {
            request RQuest = new request();
            if (RQuest.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count != 1) return;

            // first of all, copy the current sequence
            Image3D SightIm = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                            ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            //int Channel = 0;
            PointF StartPt = new PointF();
            PointF EndPt = new PointF();

            for (int TmpChannel = 0; TmpChannel < SightIm.NumBands; TmpChannel++)
            {
                for (int j = 0; j < SightIm.Height; j += (int)RQuest.numericUpDownGridSizeValue)
                {
                    StartPt.X = 0.0f;
                    StartPt.Y = j;
                    EndPt.X = SightIm.Width;
                    EndPt.Y = j;
                    new IM.Library.Tools.Drawing().Draw_Line2D(SightIm, TmpChannel, StartPt, EndPt, 255.0f);
                }
                for (int i = 0; i < SightIm.Width; i += (int)RQuest.numericUpDownGridSizeValue)
                {
                    StartPt.X = i;
                    StartPt.Y = 0.0f;
                    EndPt.X = i;
                    EndPt.Y = SightIm.Height;
                    new IM.Library.Tools.Drawing().Draw_Line2D(SightIm, TmpChannel, StartPt, EndPt, 255.0f);
                }

            }

            //UnitImage.Name = "Unit Image";
            AddImageToHeap(SightIm, 0);
            indexes.Clear();
        }
Esempio n. 25
0
        /// <summary>
        /// Merge by channels
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void channelToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;
            if (indexes.Count == 1) return;

            int NewBandNumber = 0;
            int PrevSizeX = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width;
            int PrevSizeY = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height;
            int PrevSizeZ = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth;

            int indexesCount = indexes.Count;

            for (int i = 0; i < indexesCount; i++)
            {
                NewBandNumber += ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag)).NumBands;
            }

            //if (NewBandNumber > 3)
            //{
            //    MessageBox.Show("Too many channels to merge", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    return;
            //}

            if (CheckDimensions() == false)
            {
                MessageBox.Show("Image dimensions do not match", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            // first of all, copy the current sequence
            Image3D MergedImage = new Image3D(PrevSizeX,
                            PrevSizeY,
                            PrevSizeZ,
                            NewBandNumber);

            int Channel = 0;

            for (int T = 0; T < indexesCount; T++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[T]].Tag));
                for (int TmpChannel = 0; TmpChannel < TmpIm.NumBands; Channel++, TmpChannel++)
                    Array.Copy(TmpIm.Data[TmpChannel], MergedImage.Data[Channel], MergedImage.Data[0].Length);
            }

            //MergedImage.Name = "Merged picture";
            AddImageToHeap(MergedImage, 0);
            indexes.Clear();
        }
Esempio n. 26
0
        private void poissonToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
                ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            int indexesCount = indexes.Count;
            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));

                for (int Band = 0; Band < TmpIm.NumBands; Band++)
                {
                    Array.Copy(TmpIm.Data[Band], Result.Data[Band], TmpIm.ImageSize);

                }

                //    numericUpDownGaussMeanValue
                IM.Library.Tools.PoissonNoiseGenerator PoissonNoise = new IM.Library.Tools.PoissonNoiseGenerator(12);
                PoissonNoise.Disturb(Result);

                //Result.Name = "Sqrt result";
                AddImageToHeap(Result, 0);
            }

            indexes.Clear();
        }
Esempio n. 27
0
        private float[] ComputePseudoMonteCarloStatioUnderPoissonNoiseByEmpiricalModeDecomp(Image3D Input, out float Mean, out float Std, int StartIter, int EndIter)
        {
            float[] Table = new float[EndIter - StartIter + 1];

            Random r = new Random();
            for (int Iter = StartIter; Iter <= EndIter; Iter++)
            {
                float[] TmpTable = new float[Iter];
                for (int RandIdx = 0; RandIdx < Iter; RandIdx++)
                {
                    TmpTable[RandIdx] = Input.Data[0][(int)r.Next(0, Input.ImageSize)];
                }

                Table[Iter - StartIter] = new IM.Library.Mathematics.MathTools().Mean(TmpTable);
            }

            Mean = new IM.Library.Mathematics.MathTools().Mean(Table);
            Std = new IM.Library.Mathematics.MathTools().Std(Table);
            return Table;
        }
Esempio n. 28
0
        private void anscombeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            //Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width,
            //    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height,
            //    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth,
            //    ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands);

            int indexesCount = indexes.Count;
            for (int i = 0; i < indexesCount; i++)
            {
                int NumChannel = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag)).NumBands;
                Image3D Result = new Image3D(((Image3D)(this.listViewHeap.Items[indexes[i]].Tag)).Width,
                                ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag)).Height,
                                ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag)).Depth,
                                NumChannel);

                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));

                for (int Band = 0; Band < NumChannel; Band++)
                    new IM.Library.Mathematics.MathTools().AnscombeTransform(TmpIm.Data[Band], ref Result.Data[Band]);

                AddImageToHeap(Result, 0);
            }

            indexes.Clear();
        }
Esempio n. 29
0
        private void stationirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            float Mean, Std;
            int indexesCount = indexes.Count;
            int NumIter = 100;

            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));

                int StartIter = 30;
                int EndIter = TmpIm.ImageSize / 100;

                Image3D ResImage = new Image3D(EndIter - StartIter + 1, 1, 1, 1);

                //  ResImage.Data[0] = ComputePseudoMonteCarloStatioUnderPoissonNoiseByEmpiricalModeDecomp(TmpIm,out Mean, out Std, NumIter);
                ResImage.Data[0] = ComputePseudoMonteCarloStatioUnderPoissonNoiseByEmpiricalModeDecomp(TmpIm, out Mean, out Std, StartIter, EndIter);
                new IM.Library.IO.DataToTextWriter().WriteInColumn(ResImage.Data[0], "D:\\resStation" + i, true);
                //Sequence TmpSeq = new Sequence();
                //TmpSeq.Add(ResImage);
                //IMGlobal.AddSequence(TmpSeq);

            }
        }
Esempio n. 30
0
 protected override void OnRenderPixel(Image3D image, DisplayImage display, int x, int y)
 {
     var voxel = image[x, y, 0];
     display.SetPixel(x, y, Window.GetColor(voxel));
 }
Esempio n. 31
0
        private void centralGradientToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count > 1)
            {
                MessageBox.Show("Too many images selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            int DimX = 24;
            int DimY = 16;
            int DimZ = 1;
            int Band = 1;
            float Value = 1.0f;

            if (indexes.Count == 1)
            {
                DimX = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Width;
                DimY = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Height;
                DimZ = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).Depth;
                Band = ((Image3D)(this.listViewHeap.Items[indexes[0]].Tag)).NumBands;

            }
            RequestImage RQuest = new RequestImage();
            //RQuest.ShowDialog();
            Control[] ButtonControl = RQuest.Controls.Find("numericUpDownDimX", false);
            NumericUpDown TmpNum = (NumericUpDown)ButtonControl[0];
            TmpNum.Value = DimX;

            ButtonControl = RQuest.Controls.Find("numericUpDownDimY", false);
            TmpNum = (NumericUpDown)ButtonControl[0];
            TmpNum.Value = DimY;

            ButtonControl = RQuest.Controls.Find("numericUpDownDimZ", false);
            TmpNum = (NumericUpDown)ButtonControl[0];
            TmpNum.Value = DimZ;

            ButtonControl = RQuest.Controls.Find("numericUpDownBand", false);
            TmpNum = (NumericUpDown)ButtonControl[0];
            TmpNum.Value = Band;

            ButtonControl = RQuest.Controls.Find("numericUpDownIntensity", false);
            TmpNum = (NumericUpDown)ButtonControl[0];
            TmpNum.Value = (decimal)Value;

            if (RQuest.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            Image3D UnitImage = new Image3D(DimX, DimY, DimZ, 1);

            for (int j = 0; j < UnitImage.Height; j++)
            {
                for (int i = 0; i < UnitImage.Width; i++)
                {
                    UnitImage.Data[0][i + j * UnitImage.Width] = Value * (float)Math.Sqrt((i - DimX / 2.0f) * (i - DimX / 2.0f) + (j - DimY / 2.0f) * (j - DimY / 2.0f));
                }
            }
            //UnitImage.Name = "Unit Image";
            AddImageToHeap(UnitImage, 0);

            indexes.Clear();
        }
Esempio n. 32
0
        public NSBTX(File f)
        {
            this.f = f;
            data   = f.getContents();
            str    = new ByteArrayInputStream(data);

            bool LZd = false;

            if (str.readUInt() == 0x37375A4C) //LZ77
            {
                byte[] ndata = new byte[data.Length - 4];
                Array.Copy(data, 4, ndata, 0, ndata.Length);

                data = ROM.LZ77_Decompress(ndata);
                str  = new ByteArrayInputStream(data);
                LZd  = true;
            }

            //look for TEX0 block
            //ugly, but i'm lazy to implement it properly.
            bool found      = false;
            int  blockStart = 0;

            while (str.lengthAvailable(4))
            {
                uint v = str.readUInt();
                if (v == 0x30584554) // "TEX0"
                {
                    str.setOrigin(str.getPos() - 4);
                    blockStart  = (int)(str.getPos() - 4);
                    found       = true;
                    startoffset = (int)str.getPos() - 4;
                    break;
                }
                //                else
                //                    str.skipback(3); //just in case its not word-aligned
            }
            str.seek(0);
            if (!found)
            {
                textures = new PalettedImage[0];
                palettes = new PaletteDef[0];
                return;
            }

            Console.Out.WriteLine("\n");
            //Read stuff
            str.seek(0x14);
            texDataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("Texdata " + texDataOffset.ToString("X8"));

            str.seek(0x24);
            f5texDataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("f5Texdata " + f5texDataOffset.ToString("X8"));
            f5dataOffset = str.readInt() + blockStart;
            Console.Out.WriteLine("f5data " + f5dataOffset.ToString("X8"));

            str.seek(0x30);
            palDataSize = str.readInt() * 8;
            Console.Out.WriteLine("paldata size " + palDataSize.ToString("X8"));
            str.seek(0x34);
            palDefOffset = str.readInt();
            Console.Out.WriteLine("paldef " + palDefOffset.ToString("X8"));
            palDataOffset = str.readInt();
            Console.Out.WriteLine("paldata " + palDataOffset.ToString("X8"));

            //Read texture definitions
            str.seek(0x3D);
            textures = new PalettedImage[str.readByte()];
            str.skip((uint)(0xE + textures.Length * 4));

            //ImageManagerWindow mgr = new ImageManagerWindow();
            //mgr.Text = f.name + " - Texture Editor";

            bool hasFormat5 = false;

            for (int i = 0; i < textures.Length; i++)
            {
                int    offset = 8 * str.readUShort();
                ushort param  = str.readUShort();
                int    format = (param >> 10) & 7;

                if (format == 5)
                {
                    offset += f5texDataOffset;
                }
                else
                {
                    offset += texDataOffset;
                }

                int  width  = 8 << ((param >> 4) & 7);
                int  height = 8 << ((param >> 7) & 7);
                bool color0 = ((param >> 13) & 1) != 0;
                str.readUInt(); // unused

                int size = width * height * Image3D.bpps[format] / 8;
                Console.Out.WriteLine(offset.ToString("X8") + " " + format + " " + width + "x" + height + " " + color0 + " LZ" + LZd);

                InlineFile mainfile = new InlineFile(f, offset, size, Image3D.formatNames[format], null, LZd ? InlineFile.CompressionType.LZWithHeaderComp : InlineFile.CompressionType.NoComp);
                if (format == 5)
                {
                    hasFormat5 = true;
                    int        f5size = (width * height) / 16 * 2;
                    InlineFile f5file = new InlineFile(f, f5dataOffset, f5size, Image3D.formatNames[format], null, LZd ? InlineFile.CompressionType.LZWithHeaderComp : InlineFile.CompressionType.NoComp);

                    f5dataOffset += f5size;
                    textures[i]   = new Image3Dformat5(mainfile, f5file, width, height);
                }
                else
                {
                    textures[i] = new Image3D(mainfile, color0, width, height, format, offset);
                }

                //                textures[i] = new Texture(this, color0, width, height, format, offset, "");

                /*                if (format == 5)
                 *              {
                 *                  textures[i].f5DataOffset = f5dataOffset;
                 *                  f5dataOffset += (uint)(width * height) / 16 * 2;
                 *              }*/
            }

            for (int i = 0; i < textures.Length; i++)
            {
                if (textures[i] == null)
                {
                    continue;
                }
                textures[i].name = str.ReadString(16);
                //mgr.m.addImage(textures[i]);
            }



            //Read palette definitions
            str.seek(palDefOffset + 1);
            palettes = new PaletteDef[str.readByte()];
            str.skip((uint)(0xE + palettes.Length * 4));

            for (int i = 0; i < palettes.Length; i++)
            {
                int offset = 8 * str.readUShort() + palDataOffset + blockStart;
                str.readUShort();
                palettes[i]      = new PaletteDef();
                palettes[i].offs = offset;
            }

            Array.Sort(palettes);

            for (int i = 0; i < palettes.Length; i++)
            {
                palettes[i].name = str.ReadString(16);
                if (i != palettes.Length - 1)
                {
                    palettes[i].size = palettes[i + 1].offs - palettes[i].offs;
                }
            }
            palettes[palettes.Length - 1].size = blockStart + palDataOffset + palDataSize - palettes[palettes.Length - 1].offs;

            for (int i = 0; i < palettes.Length; i++)
            {
                if (hasFormat5)
                {
                    FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs, palettes[i].size, palettes[i].name, null, LZd ? InlineFile.CompressionType.LZWithHeaderComp : InlineFile.CompressionType.NoComp));
                    pal.Add((NSMBe4.Palette)pa);
                    //mgr.m.addPalette(pa);
                }
                else
                {
                    int extrapalcount = (palettes[i].size) / 512;
                    for (int j = 0; j < extrapalcount; j++)
                    {
                        FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs + j * 512, 512, palettes[i].name + ":" + j, null, LZd ? InlineFile.CompressionType.LZWithHeaderComp : InlineFile.CompressionType.NoComp));
                        pal.Add((NSMBe4.Palette)pa);
                        //mgr.m.addPalette(pa);
                    }
                    int lastsize = palettes[i].size % 512;
                    if (lastsize != 0)
                    {
                        FilePalette pa = new FilePalette(new InlineFile(f, palettes[i].offs + extrapalcount * 512, lastsize, palettes[i].name + ":" + extrapalcount, null, LZd ? InlineFile.CompressionType.LZWithHeaderComp : InlineFile.CompressionType.NoComp));
                        pal.Add((NSMBe4.Palette)pa);
                        //mgr.m.addPalette(pa);
                    }
                }
            }

            //mgr.Show();

            //            new ImagePreviewer(textures[0].render(palettes[0])).Show();
        }
Esempio n. 33
0
        private void channelToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ListView.SelectedIndexCollection indexes = this.listViewHeap.SelectedIndices;
            if (indexes.Count == 0) return;

            int indexesCount = indexes.Count;
            int count = 0;

            for (int i = 0; i < indexesCount; i++)
            {
                Image3D TmpIm = ((Image3D)(this.listViewHeap.Items[indexes[i]].Tag));
                int ChannelNumber = TmpIm.NumBands;

                for (int indexIm = 0; indexIm < ChannelNumber; indexIm++)
                {
                    Image3D Result = new Image3D(TmpIm.Width,
                                                 TmpIm.Height,
                                                 TmpIm.Depth,
                                                 1);
                    //Result.Name = "Channel split" + count.ToString();
                    count++;
                    Array.Copy(TmpIm.Data[indexIm], Result.Data[0], Result.ImageSize);
                    AddImageToHeap(Result, 0);
                }
            }
            indexes.Clear();
        }