微血管血流速度标注

 舌下与结膜微血管血流速度检测是药物反应和疾病诊断的重要指证,但由于红细胞族之间的间隔随着血流的流动会发生聚合或分离,导致在序列时空图象上血流速度检测的困难,拟采用深度学习方法,在序列时空图象上准确检测微血管血流速度。由于现有的软件进行标注不方便、效率低,所以自己开发了个小的标注软件。采用C#编写。

 

标注软件的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace STIDraw
{
    public partial class Form1 : Form
    {
        private int m_ImgIndex = -1;
        private List<string> m_FileList = new List<string>();

        private List<YunLine> m_LineList = new List<YunLine>();


        Pen m_Pen = new Pen(Color.Red, 2);

        public Form1()
        {
            InitializeComponent();

            label3.Text = "0";
            label4.Text = "0";
            label5.Text = "0";
            label7.Text = "0";
        }

       

        public void ListFiles(FileSystemInfo info)
        {
 
            DirectoryInfo dir = info as DirectoryInfo;
 
            FileSystemInfo[] files = dir.GetFileSystemInfos();
            for (int i = 0; i < files.Length; i++)
            {
                FileInfo file = files[i] as FileInfo;
                //是文件
                if (file != null)
                {
                    string extension = Path.GetExtension(file.Name);
                    if (extension.ToUpper() == ".JPG")
                        m_FileList.Add(file.FullName);
                }
                else//对于子目录,进行递归调用
                    ListFiles(files[i]);
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            m_STIList.Clear();

            FolderBrowserDialog folder = new FolderBrowserDialog();
            folder.Description = "选择文件所在文件夹目录";  //提示的文字
            if (folder.ShowDialog() == DialogResult.OK)
            {
                m_ImgIndex = -1;
                m_FileList.Clear();


                DirectoryInfo folderInfo = new DirectoryInfo(folder.SelectedPath);
                FileSystemInfo fileinfo1 = folderInfo as FileSystemInfo;
                ListFiles(fileinfo1);


                label3.Text = m_FileList.Count.ToString();

                if (m_FileList.Count>0)
                    m_ImgIndex = 0;
                ShowImage();
            }       
        }

        private void ShowImage()
        {
            int index = m_ImgIndex;
            if (index < 0 || index >= m_FileList.Count)
                return;
            label4.Text = (m_ImgIndex +1).ToString();

            pictureBox1.Image = Image.FromFile(m_FileList[index]);
        }


        private void Save2TxtFile()
        {
            int lCount = m_LineList.Count;
            if (lCount < 1)
                return;

            string fPath = m_FileList[m_ImgIndex];
            fPath = fPath.Substring(0, fPath.LastIndexOf(".")) + ".txt";

            using (StreamWriter file = new StreamWriter(fPath, false))
            for (int i = 0; i < lCount; i++)
            {
                string lstr = m_LineList[i].pt1.X.ToString() + "," + m_LineList[i].pt1.Y.ToString() + ";";
                lstr = lstr + m_LineList[i].pt2.X.ToString() + "," + m_LineList[i].pt2.Y.ToString();
                file.WriteLine(lstr);
            }

            // 清空线条
            m_LineList.Clear();

            label7.Text = "0";

            pictureBox1.Invalidate();
        }


        // 显示下一张
        private void button3_Click(object sender, EventArgs e)
        {
            int index = m_ImgIndex + 1;
            if (index >= m_FileList.Count)
                return;

            // 提醒是否保存
            if (m_LineList.Count > 0)
            {
                if (MessageBox.Show("是否保存当前结果?", "确认对话框", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    Save2TxtFile(); 
                }
            }

            m_ImgIndex++;
            ShowImage();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int index = m_ImgIndex - 1;
            if (index < 0)
                return;

            m_ImgIndex--;
            ShowImage();
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            label5.Text = e.X.ToString() + ":" + e.Y.ToString();

            int index = m_LineList.Count;
            if (index < 1)
                return;
            index = index - 1;
            if (m_LineList[index].status == 0)
            {
                m_LineList[index].pt2.X = e.X;
                m_LineList[index].pt2.Y = e.Y; 
            }
            pictureBox1.Invalidate();
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            int index = m_LineList.Count;
            if (index < 1)
            {
                YunLine line = new YunLine();
                line.pt1.X = e.X;
                line.pt1.Y = e.Y;
                line.pt2.X = e.X;
                line.pt2.Y = e.Y;
                line.status = 0;
                m_LineList.Add(line);

                return;
            }

            index = index - 1;
            if (m_LineList[index].status == 0)
            {
                m_LineList[index].pt2.X = e.X;
                m_LineList[index].pt2.Y = e.Y;
                m_LineList[index].status = 1;

                label7.Text = m_LineList.Count.ToString();
            }
            else
            {
                YunLine line = new YunLine();
                line.pt1.X = e.X;
                line.pt1.Y = e.Y;
                line.pt2.X = e.X;
                line.pt2.Y = e.Y;
                line.status = 0;
                m_LineList.Add(line);
            }

            pictureBox1.Invalidate();
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {

        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int lCount = m_LineList.Count;
            for (int i = 0; i < lCount; i++)
            {
                e.Graphics.DrawLine(m_Pen, m_LineList[i].pt1, m_LineList[i].pt2);
            }
        }

        private void btnUpdo_Click(object sender, EventArgs e)
        {
            int lCount = m_LineList.Count - 1;
            if(lCount<0)
                return;

            m_LineList.RemoveAt(lCount);

            label7.Text = m_LineList.Count.ToString();

            pictureBox1.Invalidate();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            Save2TxtFile();
        }

        // 拷贝并重命名文件
        private void button4_Click(object sender, EventArgs e)
        {
            int lCount = m_FileList.Count;
            if (lCount < 1)
                return;

            FolderBrowserDialog folder = new FolderBrowserDialog();
            folder.Description = "选择文件所在文件夹目录";  //提示的文字
            if (folder.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < lCount; i++)
                {
                    File.Copy(m_FileList[i], folder.SelectedPath + "\\STI-" + i.ToString()+".jpg");

                    //FileInfo fi = new FileInfo(m_FileList[i]);
                    //fi.MoveTo(folder.SelectedPath + "\\STI-" + i.ToString());
                }
            }
        }

        // 从列表中移除
        private void button5_Click(object sender, EventArgs e)
        {
            this.button3.PerformClick();
        }

        private List<string> m_STIList = new List<string>();
        private void button6_Click(object sender, EventArgs e)
        {
            m_STIList.Add(m_FileList[m_ImgIndex]);

            this.button3.PerformClick();
            //button3_Click
        }

        private void button7_Click(object sender, EventArgs e)
        {
            int lCount = m_STIList.Count;
            if (lCount < 1)
                return;

            FolderBrowserDialog folder = new FolderBrowserDialog();
            folder.Description = "选择文件所在文件夹目录";  //提示的文字
            if (folder.ShowDialog() == DialogResult.OK)
            {
                for (int i = 0; i < lCount; i++)
                {
                    File.Copy(m_STIList[i], folder.SelectedPath + "\\STI-" + i.ToString() + ".jpg");

                    //FileInfo fi = new FileInfo(m_FileList[i]);
                    //fi.MoveTo(folder.SelectedPath + "\\STI-" + i.ToString());
                }
            }
        }

    }

    public class YunLine
    {
        public int status = -1;
        public Point pt1 = new Point(0, 0);
        public Point pt2 = new Point(0, 0);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值