diff --git a/Readme.txt b/Readme.txt index d9cfdd3..b925bac 100644 --- a/Readme.txt +++ b/Readme.txt @@ -1,36 +1,36 @@ -DeepTIAS 1.0 +DeepTIAS 1.9 -�X�V���e�ɂ‚��āF +���X�V���e�ɂ‚��āF 1. Gloss���o�@�\�̒lj� 2. ��̈�̕���RGB�Z�o�@�\�̒lj� 3. ���t�@�N�^�����O�ƍׂ��ȃo�O�̏C�� -�㒊�o�v���O�����̑���ɂ‚��āF +���㒊�o�v���O�����̑���ɂ‚��āF 1. VShot�摜��"data"�t�H���_�ɓ���Ă��������B 2. Start�������Ă��������B -�㒊�o�v���O�����̏o�͂ɂ‚��āF -"cropped"�t�H���_: �g���~���O�ɂ���Đ������ꂽ�摜�͎����I�ɂ����ɕۑ�����܂��B -"cropresized"�t�H���_: �T�C�Y�ύX��ɐ������ꂽ�摜�͎����I�ɂ����ɕۑ�����܂��B -"detection"�t�H���_: �㌟�o���ꂽ�摜�͎����I�ɂ����ɕۑ�����܂��B -"extraction"�t�H���_: �㒊�o���ꂽ�摜�͎����I�ɂ����ɕۑ�����܂��B -"gloss"�t�H���_�F�@Gloss���o���ꂽ�摜�͎����I�ɂ����ɕۑ�����܂��B -"mask"�t�H���_: ��̈�mask�͎����I�ɂ����ɕۑ�����܂��B -"mask_changed1"�t�H���_: SRG�㏈��������̈�mask�͎����I�ɂ����ɕۑ�����܂��B -"mask_changed2"�t�H���_: �ŏI�I�Ȑ�̈�mask�͎����I�ɂ����ɕۑ�����܂��B -"output256"�t�H���_: ����������l����摜�͎����I�ɂ����ɕۑ�����܂��B -"output_resized"�t�H���_: ���T�C�Y������l����摜�͎����I�ɂ����ɕۑ�����܂��B -"output_changed1"�t�H���_: SRG1�㏈��������l����摜�͎����I�ɂ����ɕۑ�����܂��B -"output_changed2"�t�H���_: SRG2�㏈��������l����摜�͎����I�ɂ����ɕۑ�����܂��B -"info"�t�H���_: �����œ���ꂽ�l�X�ȃf�[�^��csv�ɏ������݂����ɕۑ�����܂��D -"Log.txt": ����������摜�������L�^����܂��D +���㒊�o�v���O�����̏o�́@���i�j���Ɏ����ꂽ�t�H���_�͏����̓r���o�͂ł���C��͓��ɂ͎g�p���Ȃ� +�O�D "data"�t�H���_�F�@�����f�[�^����͂���t�H���_ +�P�D �i"detection"�t�H���_: �㌟�o�ɂ���ē���ꂽ�o�E���f�B���O�{�b�N�X��`�悵���摜�j +�Q�D �i"cropped"�t�H���_: �㌟�o�ɂ���`�̈�ȊO���}�X�N�����摜�j +�R�D "cropresized"�t�H���_: �㌟�o�ɂ��؂�o���ꂽ�̂��C���T�C�Y(256*256)���ꂽ�摜 +�S�D �i"output256"�t�H���_: �㕪�����f��������������l�o�́j +�T�D �i"output_changed1"�t�H���_: SRG�i�̈�g���j�㏈��������l����摜�j +�U�D �i"output_changed2"�t�H���_: SRG�Q�i�̈�g���j�㏈��������l����摜�j +�V�D �i"output_resized"�t�H���_: �o�E���f�B���O�{�b�N�X�̃T�C�Y�Ƀ��T�C�Y������l����摜�j +�W�D �i"mask"�t�H���_: ���摜�Ɠ����T�C�Y�̃}�X�N�摜�j +�X�D �i"mask_changed1"�t�H���_: SRG�i�̈�g���j�㏈��������̈�mask�j +�P�O�D �i"mask_changed2"�t�H���_: SRG�Q�i�̈�g���j�㏈��������̈�mask�j +�P�P�D "mask_final"�t�H���_�F�@�ŏI�I�ɓ���ꂽ��̈�������}�X�N +�P�Q�D "extraction"�t�H���_: �㒊�o���ꂽ�摜 +�P�R�D "gloss"�t�H���_�F�@Gloss���o�iIshikawa[�����������C2011]�j���ꂽ�摜 +�P�S�D "info"�t�H���_: �����œ���ꂽ�l�X�ȃf�[�^(csv�`��) +�P�T�D "Log.txt": ����������摜�̃t�@�C�������L�^ -�s��ɂ‚��āF +���s��ɂ‚��āF �f�[�^�ʂ����������I�[�o�[�����ꍇ�́C�����I�Ƀv���O������������”\��������܂��D ���̏ꍇ��"data"�t�H���_���琶���ς݂̎ʐ^��S�č폜������C�Ă�.exe���N�����Ă��������D -���s�‹��ɂ‚��āF +�����s�‹��ɂ‚��āF Python 3.6.5�i�s�K�v�j�@OpenCV3.2�i�s�K�v�j .Net Framework4.7.1 (�K�v) - -Tips: ����CPU I7�ȏ�@���������� 16G�ȏ� \ No newline at end of file diff --git a/Tongue extraction_cropresizemethod/Tongue extraction/Form1.cs b/Tongue extraction_cropresizemethod/Tongue extraction/Form1.cs index e867578..8c0b99c 100644 --- a/Tongue extraction_cropresizemethod/Tongue extraction/Form1.cs +++ b/Tongue extraction_cropresizemethod/Tongue extraction/Form1.cs @@ -18,7 +18,7 @@ [DllImport(@"RemoveSmallRegionDLL.dll", EntryPoint = "RemoveSmallRegion", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] extern static void RemoveSmallRegion(string name, string name2, int AreaLimit, int CheckMode, int NeihborMode); - Mat mat_drawBox = new Mat(1024, 1280, MatType.CV_8UC3, 1); + Mat mat_drawBox = new Mat(1024, 1280, MatType.CV_8UC3, 1); Mat mat_roi = new Mat(1024, 1280, MatType.CV_8UC3, 1); Mat mat_input = new Mat(1024, 1280, MatType.CV_8UC3, 1); Mat mat_roi256 = new Mat(256, 256, MatType.CV_8UC3, 1); @@ -633,9 +633,11 @@ continue; } - // 舌が検出された場合 + + // 舌が正常にDetectionされた場合の処理 else { + // 検出されたバウンディングボックス画像を保存 mat_drawBox.SaveImage(basepath + "\\detection" + imageFile); bitmap_bitch = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat_drawBox); Invoke((MethodInvoker)delegate @@ -645,23 +647,25 @@ }); label1.BackColor = Color.White; - + // 検出領域でcropし,256*256にリサイズして表示 label2.BackColor = Color.Red; - // 検出された場合の処理の続き for (int i = P1.Y; i < P2.Y; i++) { for (int j = P1.X; j < P2.X; j++) { + // 舌領域以外を黒へ Vec3b pix = mat_input.At(i, j); mat_cropped.Set(i, j, pix); } } mat_cropped.SaveImage(basepath + "\\cropped" + imageFile); + // 検出領域の範囲を切り出す OpenCvSharp.Size size_roi = new OpenCvSharp.Size(); size_roi.Height = rectangle.Height; size_roi.Width = rectangle.Width; roi = new Rect(P1, size_roi); mat_roisize = mat_input.Clone(roi); + // セグメンテーションのため,256*256にリサイズ Cv2.Resize(mat_roisize, mat_roi, mat_roi256.Size()); mat_roi.SaveImage(basepath + "\\cropresized" + imageFile); bitmap_bitch = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat_roi); @@ -672,7 +676,7 @@ }); label2.BackColor = Color.White; - + // セグメンテーションを行う label3.BackColor = Color.Red; byte_inputSegmentation = Bitmap2Byte(bitmap_bitch); Thread.Sleep(1000); @@ -725,9 +729,11 @@ }); label3.BackColor = Color.White; - + // 舌分割結果の後処理 label4.BackColor = Color.Red; + // 舌分割結果を保存 mat_output.SaveImage(basepath + "\\output256" + imageFile); + // 後処理(領域拡張法)でノイズ除去 try { RemoveSmallRegion(basepath + "\\output256" + imageFile, basepath + "\\output_changed1" + imageFile, 500, 1, 1); @@ -747,10 +753,12 @@ }); label4.BackColor = Color.White; - label5.BackColor = Color.Red; + // バウンディングボックスのサイズに舌分割結果をリサイズ + // この時に2値じゃなくなってるみたい Cv2.Resize(mat_outputSRG, mat_outputChanged, mat_roisize.Size()); mat_outputChanged.SaveImage(basepath + "\\output_resized" + imageFile); + // 舌検出された領域において舌領域を切り出す mat_mask = new Mat(mat_input.Size(), MatType.CV_8UC1, 1); for (int i = P1.Y; i < P2.Y; i++) { @@ -766,6 +774,7 @@ mmp = 0; Cv2.Resize(mat_mask, mat_mask, mat_input.Size()); mat_mask.SaveImage(basepath + "\\mask" + imageFile); + // ノイズ処理 try { RemoveSmallRegion(basepath + "\\mask" + imageFile, basepath + "\\mask_changed1" + imageFile, 500, 1, 1); @@ -779,6 +788,7 @@ mat_maskSRG = new Mat(basepath + "\\mask_changed2" + imageFile, ImreadModes.GrayScale); Cv2.Threshold(mat_maskSRG, mat_maskSRG, 128, 255, ThresholdTypes.Binary); + // 2値マスクの最終結果 mat_maskSRG.SaveImage(basepath + "\\mask_final" + imageFile); bitmap_bitch = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat_maskSRG); Invoke((MethodInvoker)delegate @@ -788,7 +798,7 @@ }); label5.BackColor = Color.White; - + // 元画像とマスクを合わせて,舌領域を抜き出す label6.BackColor = Color.Red; mat_extraction = mat_input.Clone(); areaCount = 0; @@ -831,7 +841,8 @@ label6.BackColor = Color.White; - /// Gloss抽出処理 extraction結果は使用しない(255,255,255の扱いが煩雑なため) + // Gloss抽出処理 + // extraction結果は使用しない(255,255,255の扱いが煩雑なため) label7.BackColor = Color.Red; mat_gloss = mat_input.Clone(); double sum = 0.0; @@ -893,18 +904,6 @@ } } - - /* - textBox1.Invoke((MethodInvoker)delegate - { - textBox1.Text = sum.ToString() + ", "; - textBox1.Text += sumsq.ToString() + ","; - textBox1.Text += avg.ToString() + Environment.NewLine; - textBox1.Text += stdev.ToString() + Environment.NewLine; - textBox1.Text += glossCount.ToString(); - }); - */ - mat_gloss.SaveImage(basepath + "\\gloss" + imageFile); bitmap_bitch = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat_gloss); Invoke((MethodInvoker)delegate @@ -913,9 +912,8 @@ pictureBox_gloss.Refresh(); }); label7.BackColor = Color.White; - /// Gloss抽出処理 - + // 処理が終わった画像を記録する label8.BackColor = Color.Red; time = DateTime.Now.ToLocalTime().ToString(); File.AppendAllText("Log.txt ", time + " " + imageFile + " Done!\n");