情報詳細Q:セグメンテーションプログラムのファイル検索のプロシージャ[read_dl_dataset_segmentation]の処理内容について教えてください。A:セグメンテーションプログラムに使用されている外部プロシージャの内部で「SegBaseNames」という変数が設定されております。この変数から同じ名前のファイルがないかを検索し、もし同じ名前のファイルがある場合にはエラーが発生するような仕組みを取っております。下図の例では、323という名前のファイルが2つ存在しており、エラーが発生致します。エラー内容*********************************Multiple matching segmentation images for image/NG1/323.tif*********************************■例Segmentation Data/Imagegs/NG/2.tifSegmentation Data/Imagegs/NG/21.tifSegmentation Data/Imagegs/NG/image1.tifSegmentation Data/Imagegs/NG/image10.tifSegmentation Data/Imagegs/NG/image01.tif上記の場合、2と21で21の中に2の文字列が含まれているのでエラー、image1とimage10で「image10の中にimage1の文字列が含まれているので」エラー単純な名前にすればするほどエラー発生する。エラーが発生することを防ぐためには同じ名前のファイルが存在した場合は、「Images」と「Labels」を同じ文字列が含まれないようにRenameする必要があります。■処理の具体例prepare_image_listsで画像PATHを分割Directories(画像ファイルまでのPATH) とExtension(拡張子)とBaseName(画像ファイル名)に分割* List all image files.prepare_image_lists (ImageDirs, ImageBaseNames, ImageExtensions, ImageDirectories)**********************************ImageBaseNames := []ImageExtensions := []ImageDirectories := []for ImageDirIndex := 0 to |ImageDirs| - 1 by 1 list_image_files (ImageDirs[ImageDirIndex], 'default', ['recursive','follow_links'], ImageFilesTmp) parse_filename (ImageFilesTmp, ImageBaseNamesTmp, ImageExtensionsTmp, ImageDirectoriesTmp) ImageBaseNames := [ImageBaseNames,ImageBaseNamesTmp] ImageExtensions := [ImageExtensions,ImageExtensionsTmp] ImageDirectories := [ImageDirectories,ImageDirectoriesTmp]endfor********************************** List all segmentation files.prepare_image_lists (SegmentationDirs, SegBaseNames, SegExtensions, SegDirectories)上記の処理からSegBaseNamesとImageBaseNamesは下記のようになる。SegBaseNames:=[2,21,image1,image10,image01]ImageBaseNames:=[2,21,image1,image10,image01]ImageBaseNamesToMatch:=ImageBaseNames↓for ImageIndex := 0 to |ImageBaseNames| - 1 by 1 tuple_regexp_match (SegBaseNames, ImageBaseNamesToMatch[ImageIndex], Match) tuple_find (Match [!=] '', 1, SegImageMatchIndex) if (SegImageMatchIndex > -1 and |SegImageMatchIndex| == 1) * Exactly one match was found. SegImageMatchIndices := [SegImageMatchIndices,SegImageMatchIndex] ImageMatchIndices := [ImageMatchIndices,ImageIndex] elseif (|SegImageMatchIndex| > 1) * There should be only one segmentation image matching each image. ImagePath := ImageDirectoriesRel[ImageIndex] + ImageBaseNames[ImageIndex] + '.' + ImageExtensions[ImageIndex] throw ('Multiple matching segmentation images for image ' + ImagePath) endifendfor正規表現を使用して、従属文字列を見つける(同じ文字列の並びがどこかにあったら抽出する処理)ImageBaseNamesToMatch[ImageIndex]:=2の場合Match:=['2','2','',''.'']となり、2の文字列が含まれるのが2つ存在している。|SegImageMatchIndex|が2となり、エラーが発生 添付ファイルタイトルセグメンテーションプログラムのファイル検索方法(read_dl_dataset_segmentationの外部プロシージャの処理内容)URL 名000005392公開状況公開済み検証状況公開済み