public Apply ( string input_dir, string output_dir, string fn ) : string[] | ||
input_dir | string | |
output_dir | string | |
fn | string | |
return | string[] |
public string[] Apply(string input_dir, string output_dir, string fn)
{
List<String> outImagePaths = new List<string>();
try
{
string fn_only = Path.GetFileNameWithoutExtension(fn);
//MeanShift
MeanShiftMultiThreads mt = new MeanShiftMultiThreads();
outImagePaths.Add(mt.ApplyYIQMT(input_dir + fn, 8, 3, 15, output_dir + fn_only + "_ms.png"));
mt = null;
GC.Collect();
// Median Cut
MedianCutMultiThreads mcq = new MedianCutMultiThreads();
List<int> qnum_list = new List<int>();
qnum_list.Add(1024);
mcq.GenerateColorPalette(output_dir + fn_only + "_ms.png", qnum_list);
string[] mcqImagePaths = mcq.quantizeImageMT(8, output_dir, output_dir, fn_only + "_mc");
mcq = null;
GC.Collect();
/* Parin
List<int> qnum_list = new List<int>();
qnum_list.Add(1024);
for (int i = 0; i < qnum_list.Count; i++)
{
Console.WriteLine(dir + fn_only + "_ms.png");
Image<Bgr, Byte> inpImage = new Image<Bgr, Byte>(dir + fn_only + "_ms.png");
Image<Rgb, Byte> dst = new Image<Rgb, Byte>(inpImage.Size);
CvInvoke.cvSmooth(inpImage.Ptr, dst.Ptr, Emgu.CV.CvEnum.SMOOTH_TYPE.CV_MEDIAN, 31, 31, 1.5, 1);
dst.ToBitmap().Save(dir + fn_only + "_mc" + qnum_list[i] + ".png", ImageFormat.Png);
}
*/
for (int i = 0; i < mcqImagePaths.Length; i++)
outImagePaths.Add(mcqImagePaths[i]);
// KMeans
for (int i = 0; i < qnum_list.Count; i++)
{
int km = 128;//qnum_list[i];
for (int k = 0; k < 10; k++)
{
MyKMeans kmeans = new MyKMeans();
km /= 2;
if (km < 4) break;
Console.WriteLine(km);
string kmeansInputFN= output_dir + fn_only + "_mc" + qnum_list[i] + ".png";
string kmeansOutputFN = output_dir + fn_only + "_mc" + qnum_list[i] + "_k" + km + ".png";
kmeans.Apply(km,kmeansInputFN, kmeansOutputFN);
outImagePaths.Add(kmeansOutputFN);
kmeans = null;
GC.Collect();
}
}
}
catch (Exception e)
{
//Console.WriteLine(e.ToString());
}
return outImagePaths.ToArray();
}
public void apply(String directory) { if (directory[directory.Length - 1] != '\\') { directory += @"\"; } string[] files = System.IO.Directory.GetFiles(directory, "*.png", System.IO.SearchOption.TopDirectoryOnly); if (files.Length == 0) { System.Console.WriteLine("No *.png file found in the specified directory! "); } foreach (string currentFile in files) { String dir = directory; String fn = System.IO.Path.GetFileName(currentFile); System.Console.WriteLine(Environment.NewLine + String.Format("Processing {0} ...", fn)); //create new directory for processing and copy image to this new dir string oldDir = dir; dir += System.IO.Path.GetFileNameWithoutExtension(fn) + @"\"; System.IO.Directory.CreateDirectory(dir); System.IO.File.Copy(oldDir + fn, dir + fn, true); string outPutDir = dir + @"output\"; System.IO.Directory.CreateDirectory(outPutDir); //Find best K ColorSegmentationWorker csw = new ColorSegmentationWorker(); int bestK = csw.Apply(dir, fn); /* Extract layers for the best K csw = new ColorSegmentationWorker(); csw.Apply(dir + fn, bestK, bestK, true); */ /* //Compare extracted layrers and save report CompareImageLayers cp = new CompareImageLayers(); String fileFormat = System.IO.Path.GetFileNameWithoutExtension(fn) + "_ms_mc1024_k" + bestK + "_l{0}" + System.IO.Path.GetExtension(fn); List<KeyValuePair<int, int>> pairList = cp.analysisSimilarityOfLayers(bestK, dir, fileFormat); //Merge similar layers and copy distinct layers cp.generateOutput(pairList, bestK, dir, outPutDir, fileFormat); */ } }