diff --git a/.gitignore b/.gitignore index 9def2f6..bc06708 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ part1/segment *.png +*.pgm +*.sift *.PNG *.swp part2-sift/part2-sift/Debug diff --git a/part2-sift/part2-sift.sdf b/part2-sift/part2-sift.sdf deleted file mode 100644 index edbb683..0000000 Binary files a/part2-sift/part2-sift.sdf and /dev/null differ diff --git a/part2-sift/part2-sift.suo b/part2-sift/part2-sift.suo index bc98d27..17b834f 100644 Binary files a/part2-sift/part2-sift.suo and b/part2-sift/part2-sift.suo differ diff --git a/part2-sift/part2-sift/Debug/CL.read.1.tlog b/part2-sift/part2-sift/Debug/CL.read.1.tlog index c88bb3c..3fcfe23 100644 Binary files a/part2-sift/part2-sift/Debug/CL.read.1.tlog and b/part2-sift/part2-sift/Debug/CL.read.1.tlog differ diff --git a/part2-sift/part2-sift/Debug/CL.write.1.tlog b/part2-sift/part2-sift/Debug/CL.write.1.tlog index b13026d..cd03dbd 100644 Binary files a/part2-sift/part2-sift/Debug/CL.write.1.tlog and b/part2-sift/part2-sift/Debug/CL.write.1.tlog differ diff --git a/part2-sift/part2-sift/Debug/cl.command.1.tlog b/part2-sift/part2-sift/Debug/cl.command.1.tlog index 512bd34..6594c96 100644 Binary files a/part2-sift/part2-sift/Debug/cl.command.1.tlog and b/part2-sift/part2-sift/Debug/cl.command.1.tlog differ diff --git a/part2-sift/part2-sift/Debug/part2-sift.lastbuildstate b/part2-sift/part2-sift/Debug/part2-sift.lastbuildstate index fcac9a3..2fe65b0 100644 --- a/part2-sift/part2-sift/Debug/part2-sift.lastbuildstate +++ b/part2-sift/part2-sift/Debug/part2-sift.lastbuildstate @@ -1,2 +1,2 @@ #v4.0:v100 -Debug|Win32|C:\Users\hardcore\class\cse515\part2-sift\| +Debug|Win32|C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\| diff --git a/part2-sift/part2-sift/Debug/part2-sift.log b/part2-sift/part2-sift/Debug/part2-sift.log index 36088d6..91d6b8b 100644 --- a/part2-sift/part2-sift/Debug/part2-sift.log +++ b/part2-sift/part2-sift/Debug/part2-sift.log @@ -1,31 +1,56 @@ -Build started 10/30/2010 12:12:48 PM. - 1>Project "C:\Users\hardcore\class\cse515\part2-sift\part2-sift\part2-sift.vcxproj" on node 2 (build target(s)). - 1>InitializeBuildStatus: +Build started 11/3/2010 11:43:19 PM. + 1>Project "C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\part2-sift.vcxproj" on node 2 (rebuild target(s)). + 1>_PrepareForClean: + Deleting file "Debug\part2-sift.lastbuildstate". + InitializeBuildStatus: Creating "Debug\part2-sift.unsuccessfulbuild" because "AlwaysCreate" was specified. ClCompile: - C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /I"C:\Users\hardcore\class\cse515\part2-sift\part2-sift\vlfeat-0.9.9" /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /wd4251 /analyze- /errorReport:prompt Sifter.cpp + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /wd4251 /analyze- /errorReport:prompt Sift.cpp Sifter.cpp Sifter.cpp + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(47): warning C4018: '>' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(52): warning C4244: 'initializing' : conversion from 'unsigned int' to 'float', possible loss of data + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(60): warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(73): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(105): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(111): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(114): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(125): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(178): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(181): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(193): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(207): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(241): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(246): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(257): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(262): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(272): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(276): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(298): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(375): warning C4018: '<' : signed/unsigned mismatch + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sifter.cpp(377): warning C4018: '<' : signed/unsigned mismatch + Sift.cpp + 1>c:\users\ace\documents\visual studio 2010\projects\515sift\part2-sift\part2-sift\sift.cpp(39): warning C4244: 'initializing' : conversion from 'double' to 'float', possible loss of data + Generating Code... ManifestResourceCompile: - All outputs are up-to-date. + C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\rc.exe /nologo /fo"Debug\part2-sift.exe.embed.manifest.res" Debug\part2-sift_manifest.rc Link: - C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\hardcore\class\cse515\part2-sift\Debug\part2-sift.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Users\hardcore\class\cse515\part2-sift\part2-sift\vlfeat-0.9.9\bin\w32" vl.lib CORE_RL_Magick++_.lib CORE_RL_Magick_.lib X11.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Debug\part2-sift.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\hardcore\class\cse515\part2-sift\Debug\part2-sift.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\hardcore\class\cse515\part2-sift\Debug\part2-sift.lib" /MACHINE:X86 "Debug\part2-sift.exe.embed.manifest.res" + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\ImageMagick-6.6.5-Q16" /LIBPATH:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\vlfeat-0.9.9\bin\w32" CORE_RL_Magick++_.lib CORE_RL_Magick_.lib X11.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Debug\part2-sift.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.lib" /MACHINE:X86 "Debug\part2-sift.exe.embed.manifest.res" Debug\Sift.obj Debug\Sifter.obj Manifest: + Deleting file "Debug\part2-sift.exe.embed.manifest". C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"Debug\part2-sift.exe.embed.manifest" /manifest "Debug\part2-sift.exe.intermediate.manifest" - All outputs are up-to-date. + C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\rc.exe /nologo /fo"Debug\part2-sift.exe.embed.manifest.res" Debug\part2-sift_manifest.rc LinkEmbedManifest: - All outputs are up-to-date. - part2-sift.vcxproj -> C:\Users\hardcore\class\cse515\part2-sift\Debug\part2-sift.exe - PostBuildEvent: - copy C:\Users\hardcore\class\cse515\part2-sift\part2-sift\vlfeat-0.9.9\bin\w32\vl.dll C:\Users\hardcore\class\cse515\part2-sift\Debug - :VCEnd - 1 file(s) copied. + C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\ImageMagick-6.6.5-Q16" /LIBPATH:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\vlfeat-0.9.9\bin\w32" CORE_RL_Magick++_.lib CORE_RL_Magick_.lib X11.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Debug\part2-sift.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.lib" /MACHINE:X86 "Debug\part2-sift.exe.embed.manifest.res" + Debug\Sift.obj + Debug\Sifter.obj + part2-sift.vcxproj -> C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\Debug\part2-sift.exe FinalizeBuildStatus: Deleting file "Debug\part2-sift.unsuccessfulbuild". Touching "Debug\part2-sift.lastbuildstate". - 1>Done Building Project "C:\Users\hardcore\class\cse515\part2-sift\part2-sift\part2-sift.vcxproj" (build target(s)). + 1>Done Building Project "C:\Users\Ace\Documents\Visual Studio 2010\Projects\515Sift\part2-sift\part2-sift\part2-sift.vcxproj" (rebuild target(s)). Build succeeded. -Time Elapsed 00:00:03.08 +Time Elapsed 00:00:04.07 diff --git a/part2-sift/part2-sift/Debug/vc100.idb b/part2-sift/part2-sift/Debug/vc100.idb index 99bf9a5..5f304a4 100644 Binary files a/part2-sift/part2-sift/Debug/vc100.idb and b/part2-sift/part2-sift/Debug/vc100.idb differ diff --git a/part2-sift/part2-sift/Debug/vc100.pdb b/part2-sift/part2-sift/Debug/vc100.pdb index 9f11cc8..68883d2 100644 Binary files a/part2-sift/part2-sift/Debug/vc100.pdb and b/part2-sift/part2-sift/Debug/vc100.pdb differ diff --git a/part2-sift/part2-sift/FullExtractor-Driver.cpp b/part2-sift/part2-sift/FullExtractor-Driver.cpp new file mode 100644 index 0000000..4e88027 --- /dev/null +++ b/part2-sift/part2-sift/FullExtractor-Driver.cpp @@ -0,0 +1,89 @@ +#include +#include +#include "Sifter.h" +#include "windows.h" + +void IndexDirectory(const char *, int, int); +void IndexFile(std::string, std::string, Sifter *, int, int); + +int main(int argc, const char * argv[]){ + + if(argc != 4) + { + std::cout << "Usage: " << std::endl; + std::cout << "SiftExtractor.exe " << std::endl; + return 1; + } + int newK = atoi(argv[1]); + int newL = atoi(argv[2]); + IndexDirectory(argv[3], newK, newL); +/* Sifter test; + std::vector> exam; + exam = test.keynodeSetExtract(argv[1], 10,10); + for(int i = 0; i < exam.size(); i++) + { + for(int j = 0; j < exam[i].size(); j++) + { + std::cout << exam[i][j] << " "; + } + std::cout << std::endl; + } + std::cout << "DONE!" << std::endl;*/ + + return 0; +} + +void IndexDirectory(const char *foldername, int k, int l) +{ + WIN32_FIND_DATAA findData; + char findPattern[MAX_PATH]; + sprintf(findPattern, "%s*", foldername); + HANDLE hFind = FindFirstFileA(findPattern, &findData); + Sifter siftOMatic; + std::string fullName = ""; + std::string fn = ""; + std::ofstream outputfile; + outputfile.open("output.txt"); + if(hFind != INVALID_HANDLE_VALUE) + { + do + { + if(!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + fullName = foldername; + fn = findData.cFileName; + fullName += fn; + std::cout << "Now indexing: " << fullName << std::endl; + IndexFile(fullName, fn, &siftOMatic, k, l); + // Index image... + } + }while(FindNextFileA(hFind, &findData)); + } + outputfile.close(); +} + +void IndexFile(std::string filename, std::string image, Sifter *siftIt, int k, int l) +{ + std::vector> extract = siftIt->keynodeSetExtract(filename, k, l); + std::ofstream f; + f.open("output.txt", std::ios_base::app); + for(int i = 0; i < extract.size(); i++) + { + f << image << ","; + std::cout << image << ","; + for(int j = 0; j < extract[i].size(); j++) + { + f << extract[i][j]; + std::cout << extract[i][j]; + if(j+1 != extract[i].size()) + { + std::cout << ","; + f << ","; + } + } + f << std::endl; + std::cout << std::endl; + } + f.close(); + +} \ No newline at end of file diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_Magick++_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_Magick++_.dll new file mode 100644 index 0000000..1d3f946 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_Magick++_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_bzlib_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_bzlib_.dll new file mode 100644 index 0000000..f71e051 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_bzlib_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jbig_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jbig_.dll new file mode 100644 index 0000000..172d89c Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jbig_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jp2_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jp2_.dll new file mode 100644 index 0000000..874bf5f Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jp2_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jpeg_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jpeg_.dll new file mode 100644 index 0000000..ac1d9bf Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_jpeg_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_lcms_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_lcms_.dll new file mode 100644 index 0000000..f1962b2 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_lcms_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_libxml_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_libxml_.dll new file mode 100644 index 0000000..a2508b0 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_libxml_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_magick_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_magick_.dll new file mode 100644 index 0000000..095652a Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_magick_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_png_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_png_.dll new file mode 100644 index 0000000..58da037 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_png_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_tiff_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_tiff_.dll new file mode 100644 index 0000000..7a8b1fb Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_tiff_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_ttf_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_ttf_.dll new file mode 100644 index 0000000..8493082 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_ttf_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_wand_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_wand_.dll new file mode 100644 index 0000000..f46720a Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_wand_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_xlib_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_xlib_.dll new file mode 100644 index 0000000..1586b4b Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_xlib_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_zlib_.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_zlib_.dll new file mode 100644 index 0000000..1f5452a Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/CORE_RL_zlib_.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/SiftExtractor.exe b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/SiftExtractor.exe new file mode 100644 index 0000000..4957423 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/SiftExtractor.exe differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/X11.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/X11.dll new file mode 100644 index 0000000..9ea6433 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/X11.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/Xext.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/Xext.dll new file mode 100644 index 0000000..ecd59ad Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/Xext.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/atl100.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/atl100.dll new file mode 100644 index 0000000..104b0cd Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/atl100.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_Magick++_.lib b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_Magick++_.lib new file mode 100644 index 0000000..b99827c Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_Magick++_.lib differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_magick_.lib b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_magick_.lib new file mode 100644 index 0000000..a0f5b72 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_magick_.lib differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_wand_.lib b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_wand_.lib new file mode 100644 index 0000000..0b86fbc Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/CORE_RL_wand_.lib differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/X11.lib b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/X11.lib new file mode 100644 index 0000000..6e9e232 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/lib/X11.lib differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/mfc100.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/mfc100.dll new file mode 100644 index 0000000..013baad Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/mfc100.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcp100.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcp100.dll new file mode 100644 index 0000000..0285593 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcp100.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcr100.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcr100.dll new file mode 100644 index 0000000..6d6af7e Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/msvcr100.dll differ diff --git a/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/vcomp100.dll b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/vcomp100.dll new file mode 100644 index 0000000..ce39f11 Binary files /dev/null and b/part2-sift/part2-sift/ImageMagick-6.6.5-Q16/vcomp100.dll differ diff --git a/part2-sift/part2-sift/SiftExtractor.exe b/part2-sift/part2-sift/SiftExtractor.exe new file mode 100644 index 0000000..4957423 Binary files /dev/null and b/part2-sift/part2-sift/SiftExtractor.exe differ diff --git a/part2-sift/part2-sift/Sifter.cpp b/part2-sift/part2-sift/Sifter.cpp index eb15791..dce61f8 100644 --- a/part2-sift/part2-sift/Sifter.cpp +++ b/part2-sift/part2-sift/Sifter.cpp @@ -16,12 +16,15 @@ Sifter::Sifter(void) // This will replace runSift and return a combined vector of vectors... // parameters are a string that is the filename of the original (unsegemented) image // targetK and targetL specified -std::vector> Sifter::keynodeSetExtract(std::string fname, int targetK, int targetL) +std::vector> Sifter::keynodeSetExtract(std::string fname, int targetK, int targetL) { - try { // convert image to pgm + std::cout << "Loading: " << fname << std::endl; + Magick::Image image(fname); + image.quantizeColorSpace(Magick::GRAYColorspace); + image.write("test.pgm"); } catch(Magick::Exception &error_) { @@ -29,16 +32,13 @@ std::vector> Sifter::keynodeSetExtract(std::string fname, int std::cout << error_.what() << std::endl; } - // can't get image magick working properly under windows...ignoring for now - - //for now just use temp.pgm file - std::string pgmFile = "temp.pgm"; + std::string pgmFile = "test.pgm"; Sift *sdata; sdata = new Sift(); this->runSift(pgmFile,sdata); // so this is confusing and I probably should change it - //get P returns 4 float K points + // get P returns 4 float K points // get K returns descriptors std::vector> myp = sdata->getP(); std::vector> myk = sdata->getK(); @@ -48,10 +48,6 @@ std::vector> Sifter::keynodeSetExtract(std::string fname, int { targetK = myp.size(); } - if(targetL > 128) - { - targetL = 128; - } float ratioCheck = targetK / myp.size(); bool justTop = false; @@ -66,14 +62,14 @@ std::vector> Sifter::keynodeSetExtract(std::string fname, int { numFor25 = targetK; } + std::vector candidates; // contains the indexes of our candidates for being a k, node. These will eventually be the // points that get clustered - - typedef std::map MapType; - MapType my_map; + MapType my_map; + for(int i = 0; i < myp.size(); i++) { my_map.insert(std::pair(myp[i][2],i)); @@ -103,32 +99,118 @@ std::vector> Sifter::keynodeSetExtract(std::string fname, int } std::vector> prunedP; + std::vector> descriptors; std::vector> prunedL; for(int i = 0; i < final.size(); i++) { prunedP.push_back(myp[final[i]]); - prunedL.push_back(myk[final[i]]); + descriptors.push_back(myk[final[i]]); } + /* + for(int i = 0; i < descriptors.size(); i++) + { + std::cout << "Row " << i << ": "; + for(int j = 0; j < prunedP[i].size(); j++) + { + std::cout << prunedP[i][j] << " "; + } + std::cout << std::endl; + }*/ + - // for example, printing all descriptors + // Currently prunes 128-64 with 16 sized steps, then 64-48 with + // 4 sized steps, then 48-24 by 12 sized steps, then 24-8 by 2 + // Not very elegant blech. + for(int i=0; i < descriptors.size(); i++){ + int start = 0; + int interval = 8; + int pruneVal = 128 - targetL; + std::vector tmp = descriptors[i]; + + if(targetL < 128){ // Prune 8's down to 4's + while(pruneVal > 0 && start < 4){ + //std::cout << "128 prune val: " << pruneVal << " start: " << start << " target: " << targetL << std::endl; + tmp = Sifter::dPruneByJoin(tmp, interval, start); + /*for(int j = 0; j < tmp.size(); j++) + { + std::cout << tmp[j] << " "; + } + std::cout << std::endl;*/ + start++; interval--; + pruneVal = pruneVal - 16; + } + } + if(targetL < 64){ // Prune 4's corners + //std::cout << "Cornering, pruneVal: " << pruneVal << std::endl; + int corner = 3; + int corners[4] = {1, 4, 13, 16}; + while(pruneVal > 0 && corner >= 0){ + // We'll prune backwards + tmp = Sifter::dPruneByDrop(tmp, corners[corner], 4); + corner--; + pruneVal = pruneVal - 4; + } + } + if(targetL < 48){ // Prune outside + start = 0; + interval = 4; + while(pruneVal > 0 && start < 2){ + tmp = Sifter::dPruneByJoin(tmp, interval, start); + start++; interval--; + pruneVal = pruneVal - 12; + } + } + if(targetL < 24){ // Remove outside + int corner = 7; + int corners[8] = {1, 2, 3, 6, 7, 10, 11, 12}; + while(pruneVal > 0 && corner >= 0){ + // We'll prune backwards + tmp = Sifter::dPruneByDrop(tmp, corners[corner], 2); + corner--; + pruneVal = pruneVal - 2; + } + } + prunedL.push_back(tmp); + } + + // Final pruned results for(int i = 0; i < prunedL.size(); i++) { + //std::cout << "Row " << i << ": "; for(int j = 0; j < prunedL[i].size(); j++) { - std::cout << prunedL[i][j] << " "; + // std::cout << prunedL[i][j] << " "; } - std::cout << std::endl; + //std::cout << std::endl; } + return prunedL; +} - // ACE - Prune each L here - // pruned L contains k vectors of descriptors; this k is our selected k - - - - // combine rows of P and L and return +std::vector Sifter::dPruneByJoin(std::vector d, int interval, int start){ + std::vector pruned; pruned.clear(); + //std::cout << "D size: " << d.size() << std::endl; + for(int i=0; i < d.size(); i++){ + if(i % interval == start){ + pruned.push_back(d[i]+d[i+1]); + i++; + }else{ + pruned.push_back(d[i]); + } + }; + return pruned; +} +std::vector Sifter::dPruneByDrop(std::vector d, int block, int blockSize){ + std::vector pruned; pruned.clear(); + int currentBlock = 0; + for(int i=0; i < d.size(); i++){ + if(i%blockSize==0){ currentBlock++; }; + if(block!=currentBlock){ + pruned.push_back(d[i]); + }; + }; return pruned; } @@ -136,7 +218,7 @@ std::vector Sifter::kMeans(int targetK, std::vector candidates, std::v { std::vector> member; std::vector> centroids; - + //initialize our members, just to top k for(int i = 0; i < targetK; i++) { @@ -153,7 +235,7 @@ std::vector Sifter::kMeans(int targetK, std::vector candidates, std::v // let's just start with 5... - for(int i = 0; i < 5; i++) + for(int i = 0; i < 10; i++) { //re compute centroid //for every cluster @@ -167,8 +249,24 @@ std::vector Sifter::kMeans(int targetK, std::vector candidates, std::v x += data[c[k]][0]; // add x value for each member of cluster y += data[c[k]][1]; // add y value for each member of cluster } - x = x / c.size(); - y = y / c.size(); + int s = c.size(); + if(s == 0) + { + s = 1; + } + x = x / s; + y = y / s; + + // 0,0 are empty clusters, so let's random pick another centroid + if(x == 0) + { + x = std::rand() % 100 + 1; + } + if(y == 0) + { + y = std::rand() % 100 + 1; + } + centroids[j][0] = x; centroids[j][1] = y; } @@ -190,17 +288,31 @@ std::vector Sifter::kMeans(int targetK, std::vector candidates, std::v // now we find the members closest to their centroids for(int i = 0; i < centroids.size(); i++) { + //std::cout << "centroid " << i << " :: " << centroids[i][0] << "," << centroids[i][1] << std::endl; float distance = 10000; int winner = 0; for(int j = 0; j < member[i].size(); j++) { float d = this->distance(centroids[i][0],centroids[i][1],data[member[i][j]][0],data[member[i][j]][1]); + //std::cout << "d: " << d << " vs distance: " << distance << std::endl; if(d < distance) - { - distance = d; - winner = member[i][j]; + { + bool dupe = false; + for(int d = 0; d < final.size(); d++) + { + if(final[d] == member[i][j]) + { + dupe = true; + } + } + if(! dupe) + { + distance = d; + winner = member[i][j]; + } } } + //std::cout << "Found winner: " << winner << std::endl; final.push_back(winner); } @@ -287,10 +399,11 @@ Sifter::~Sifter(void) { } +/* int main(int argc, const char * argv[]){ Sifter test; - std::vector> exam; - exam = test.keynodeSetExtract("example1.png", 10,10); + std::vector> exam; + exam = test.keynodeSetExtract(argv[1], 10,10); for(int i = 0; i < exam.size(); i++) { for(int j = 0; j < exam[i].size(); j++) @@ -320,6 +433,6 @@ int main(int argc, const char * argv[]){ for(i = 0; i < 128; i++) { std::cout << myk[0][i] << ", " << std::endl; - }*/ + } return 0; -} +}*/ diff --git a/part2-sift/part2-sift/Sifter.h b/part2-sift/part2-sift/Sifter.h index df1ecc7..ead296d 100644 --- a/part2-sift/part2-sift/Sifter.h +++ b/part2-sift/part2-sift/Sifter.h @@ -7,10 +7,12 @@ class Sifter Sifter(void); ~Sifter(void); void runSift (std::string, Sift *); - std::vector> keynodeSetExtract(std::string, int, int); + std::vector> keynodeSetExtract(std::string, int, int); void Sifter::getSortedIndices(std::vector>, std::vector, int, int); std::vector Sifter::kMeans(int, std::vector, std::vector>); int Sifter::getClosestCentroid(std::vector>,float,float); float Sifter::distance(float, float, float, float); + std::vector Sifter::dPruneByJoin(std::vector, int, int); + std::vector Sifter::dPruneByDrop(std::vector, int, int); }; diff --git a/part2-sift/part2-sift/part2-sift.exe b/part2-sift/part2-sift/part2-sift.exe new file mode 100644 index 0000000..ad548fe Binary files /dev/null and b/part2-sift/part2-sift/part2-sift.exe differ diff --git a/part2-sift/part2-sift/part2-sift.vcxproj b/part2-sift/part2-sift/part2-sift.vcxproj index 1b30e1f..bcee799 100644 --- a/part2-sift/part2-sift/part2-sift.vcxproj +++ b/part2-sift/part2-sift/part2-sift.vcxproj @@ -47,8 +47,8 @@ true - C:\Users\hardcore\class\cse515\part2-sift\part2-sift\ImageMagick-6.6.5-Q16\include;$(IncludePath) - C:\Users\hardcore\class\cse515\part2-sift\part2-sift\ImageMagick-6.6.5-Q16\lib;$(LibraryPath) + $(ProjectDir)\ImageMagick-6.6.5-Q16\include;$(IncludePath) + $(ProjectDir)\ImageMagick-6.6.5-Q16\lib;$(LibraryPath) false @@ -59,18 +59,20 @@ Level3 Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - $(ProjectDir)vlfeat-0.9.9;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) 4251;%(DisableSpecificWarnings) + MultiThreadedDLL Console true - $(ProjectDir)vlfeat-0.9.9\bin\w32;%(AdditionalLibraryDirectories) - vl.lib;CORE_RL_Magick++_.lib;CORE_RL_Magick_.lib;X11.lib;%(AdditionalDependencies) + $(ProjectDir)ImageMagick-6.6.5-Q16;$(ProjectDir)vlfeat-0.9.9\bin\w32;%(AdditionalLibraryDirectories) + CORE_RL_Magick++_.lib;CORE_RL_Magick_.lib;X11.lib;%(AdditionalDependencies) - copy $(ProjectDir)vlfeat-0.9.9\bin\w32\vl.dll $(SolutionDir)$(ConfigurationName) + +