2013년 7월 18일 목요일

Integer K-Means clustering using VLFeat

#include <opencv2\opencv.hpp>
#include <ikmeans.h>

using namespace std;
using namespace cv;

#pragma comment(lib, "opencv_core246.lib")
#pragma comment(lib, "opencv_highgui246.lib")
#pragma comment(lib, "vl.lib")

int main()
{
// data generation
unsigned char data[200];
RNG rng(time(0));
for (int i = 0; i < 50; i++)
{
data[i*2] = rng.uniform(20, 100);
data[i*2+1] = rng.uniform(150, 230);
data[100+i*2] = rng.uniform(150, 230);
data[100+i*2+1] = rng.uniform(20, 100);
}

// kmeans initialization
VlIKMFilt *ikm = vl_ikm_new(VlIKMAlgorithms::VL_IKM_LLOYD);
vl_ikm_init_rand(ikm, 2, 2);

// kmeans clustering
vl_ikm_train(ikm, (const vl_uint8 *)data, 100);

// get centers
const vl_ikm_acc *centers = vl_ikm_get_centers(ikm);

// quanization
vl_uint assignments[100];
vl_ikm_push(ikm, assignments, data, 100);

// result visualization
Mat image(250, 250, CV_8UC3);
circle(image, Point(centers[0],centers[1]), 3, Scalar(255,0,0), 2);
circle(image, Point(centers[2],centers[3]), 3, Scalar(0,0,255), 2);
for (int i = 0; i < 100; i++)
{
if (assignments[i] == 0)
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(255,0,0), 2);
else
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(0,0,255), 2);
}
cvShowImage("Image", &(IplImage)image);
waitKey();

// termination
vl_ikm_delete(ikm);

return 0;
}


K-means Clustering using VLFeat

#include <opencv2\opencv.hpp>
#include <kmeans.h>

using namespace std;
using namespace cv;

#pragma comment(lib, "opencv_core246.lib")
#pragma comment(lib, "opencv_highgui246.lib")
#pragma comment(lib, "vl.lib")

int main()
{
// data generation
float data[200];
RNG rng(time(0));
for (int i = 0; i < 50; i++)
{
data[i*2] = rng.uniform(20, 230);
data[i*2+1] = rng.uniform(271, 480);
data[100+i*2] = rng.uniform(271, 480);
data[100+i*2+1] = rng.uniform(20, 230);
}

// kmeans initialization
VlKMeans *km = vl_kmeans_new(VL_TYPE_FLOAT, VlDistanceL2);

// parameter setting
vl_kmeans_set_algorithm(km, VlKMeansAlgorithm::VlKMeansLloyd);
vl_kmeans_set_initialization(km, VlKMeansInitialization::VlKMeansPlusPlus);

// kmeans clustering
vl_kmeans_cluster(km, data, 2, 100, 2);

// get centers
const float *centers = (const float *)vl_kmeans_get_centers(km);

// quanization
vl_uint32 assignments[100];
float distances[100];
vl_kmeans_quantize(km, assignments, distances, data, 100);

// result visualization
Mat image(500, 500, CV_8UC3);
circle(image, Point(centers[0],centers[1]), 3, Scalar(255,0,0), 2);
circle(image, Point(centers[2],centers[3]), 3, Scalar(0,0,255), 2);
for (int i = 0; i < 100; i++)
{
if (assignments[i] == 0)
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(255,0,0), 2);
else
circle(image, Point(data[i*2],data[i*2+1]), 1, Scalar(0,0,255), 2);
}
cvShowImage("Image", &(IplImage)image);
waitKey();

// termination
vl_kmeans_delete(km);

return 0;
}

2013년 6월 16일 일요일

Converting Java BufferedImage to OpenCV Mat and vice versa

BufferedImage to Mat

BufferedImage image = myBufferedImage;
byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(image.getHeight(), image.getWidth, CvType.CV_8UC3);
mat.put(0, 0, data);


Mat to BufferedImage

Mat mat = myMat;
byte[] data = new byte[mat.rows()*mat.cols()*(int)(mat.elemSize())];
mat.get(0, 0, data);
if (mat.channels() == 3) {
for (int i = 0; i < data.length; i += 3) {
byte temp = data[i];
data[i] = data[i + 2];
data[i + 2] = temp;
}
}
BufferedImage image = new BufferedImage(mat.cols(), mat.rows(), BufferedImage.TYPE_3BYTE_BGR);
image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);

2013년 5월 27일 월요일

Chrome Shortcuts

탭 및 창 단축키

Ctrl+N새 창을 엽니다.
Ctrl+T새 탭을 엽니다.
Ctrl+Shift+N시크릿 모드에서 새 창을 엽니다.
Ctrl+O를 누른 다음 파일을 선택합니다.컴퓨터의 파일을 Chrome에서 엽니다.
Ctrl 키를 누른 상태에서 링크를 클릭합니다. 또는 가운데 마우스 버튼(또는 마우스휠)으로 링크를 클릭합니다.백그라운드의 새 탭에서 링크가 열립니다.
Ctrl+Shift 키를 누른 상태에서 링크를 클릭합니다. 또는 Shift 키를 누른 상태에서 가운데 마우스 버튼(또는 마우스휠)으로 링크를 클릭합니다.새 탭에서 링크를 열고 새로 열린 탭으로 전환합니다.
Shift 키를 누른 상태에서 링크를 클릭합니다.새 창에서 링크를 엽니다.
Ctrl+Shift+T마지막으로 닫았던 탭을 다시 엽니다. Chrome은 최근에 닫았던 탭을 10개까지 기억합니다.
링크를 탭으로 드래그합니다.탭에서 링크를 엽니다.
링크를 탭 표시줄의 빈 영역으로 드래그합니다.새 탭에서 링크를 엽니다.
탭 표시줄 밖으로 탭을 드래그합니다.새 창에서 탭을 엽니다.
탭 표시줄 밖으로 탭을 드래그하여 기존 창으로 이동합니다.기존 창에서 탭을 엽니다.
Esc 키를 누른 상태에서 탭을 드래그합니다.탭을 원래 위치로 되돌립니다.
Ctrl+1 ~ Ctrl+8Switches to the tab at the specified position number on the tab strip.
Ctrl+9마지막 탭으로 전환합니다.
Ctrl+Tab 또는 Ctrl+PgDown다음 탭으로 전환합니다.
Ctrl+Shift+Tab 또는 Ctrl+PgUp이전 탭으로 전환합니다.
Alt+F4 또는 Ctrl+Shift+W현재 창을 닫습니다.
Ctrl+W 또는 Ctrl+F4현재 탭 또는 팝업을 닫습니다.
가운데 마우스 버튼(또는 마우스휠)으로 탭을 클릭합니다.클릭한 탭을 닫습니다.
브라우저 툴바의 뒤로 또는 앞으로 화살표를 마우스 오른쪽 버튼으로 클릭하거나 길게 클릭합니다.탭에 인터넷 사용기록이 표시됩니다.
Backspace 키 또는 Alt 키와 왼쪽 화살표 키를 함께 누릅니다.해당 탭의 인터넷 사용기록에 저장된 이전 페이지로 이동합니다.
Shift+Backspace 키 또는 Alt 키와 오른쪽 화살표 키를 함께 누릅니다.해당 탭의 인터넷 사용기록에 저장된 다음 페이지로 이동합니다.
Ctrl 키를 누르고 뒤로 화살표, 앞으로 화살표 또는 툴바의 이동 버튼을 클릭합니다. 또는 마우스 버튼이나 마우스휠로 세 가지 중 아무 버튼이나 클릭합니다.백그라운드의 새 탭에서 버튼 대상이 열립니다.
탭 표시줄의 빈 영역을 더블클릭합니다.창을 최대화하거나 최소화합니다.
Alt+Home현재 창에서 홈페이지를 엽니다.

Chrome 기능 단축키

Alt+F나 Alt+E 또는F10Chrome을 맞춤설정하고 설정을 제어할 수 있는 Chrome 메뉴 Chrome menu를 엽니다.
Ctrl+Shift+B북마크바를 표시하거나 숨깁니다.
Ctrl+H방문 기록 페이지를 엽니다.
Ctrl+J다운로드 페이지를 엽니다.
Ctrl+Shift+Esc작업 관리자를 엽니다.
Shift+Alt+T브라우저 툴바의 첫번째 도구에 포커스를 설정합니다. 그 다음에 다음 단축키를 사용하여 툴바 사이를 이동할 수 있습니다.
  • Tap, Shift+Tab, Home, End, 오른쪽 화살표 및 왼쪽 화살표를 눌러 툴바의 다른 항목으로 포커스를 이동합니다.
  • 스페이스바 또는 Enter를 눌러 페이지 및 브라우저 작업과 함께 툴바 버튼을 활성화합니다.
  • Shift+F10을 누르면 관련된 컨텍스트 메뉴가 표시됩니다(예: 뒤로 버튼의 경우 인터넷 사용기록).
  • Esc를 눌러 포커스를 툴바에서 페이지로 되돌립니다.
F6 또는 Shift+F6키보드로 액세스할 수 있는 다음 창으로 포커스가 전환됩니다. 이 창은 다음 항목을 포함합니다.
  • 검색주소창의 URL을 강조표시합니다.
  • 북마크바(표시되는 경우)
  • 주요 웹 콘텐츠(정보 표시줄 포함)
  • 다운로드바(표시되는 경우)
Ctrl+Shift+J개발자 도구를 엽니다.
Ctrl+Shift+Delete인터넷 사용정보 삭제 대화상자를 엽니다.
F1새 탭에서 도움말 센터를 엽니다.
Ctrl+Shift+M여러 사용자 간에 전환합니다.

검색주소창 단축키

검색주소창에서 다음 단축키를 사용하세요.
검색어를 입력한 다음 Enter 키를 누릅니다.기본 검색엔진을 사용하여 검색을 수행합니다.
검색엔진 키워드를 입력하고 스페이스바를 누른 후 검색어를 입력한 다음 Enter 키를 누릅니다.키워드와 관련된 검색엔진을 사용하여 검색을 수행합니다.
검색엔진 URL을 입력하고 프롬프트가 표시되면 Tab 키를 누른 후 검색어를 입력하고 Enter 키를 누릅니다.URL과 관련된 검색엔진을 사용하여 검색을 수행합니다.
Ctrl+Enter검색주소창에 입력한 내용에 www. 및 .com을 추가한 다음 결과 URL을 엽니다.
URL을 입력한 다음 Alt+Enter 키를 누릅니다.새 탭에서 URL을 엽니다.
Ctrl+L 또는 Alt+DHighlights the URL.
Ctrl+K 또는 Ctrl+E검색주소창에 '?'를 삽입합니다. 물음표 뒤에 검색어를 입력하면 기본 검색엔진을 사용하여 검색이 수행됩니다.
Ctrl 키와 왼쪽 화살표 키를 함께 누릅니다.커서를 검색주소창의 이전 키워드로 이동합니다.
Ctrl 키와 오른쪽 화살표 키를 함께 누릅니다.커서를 검색주소창의 다음 키워드로 이동합니다.
Ctrl+Backspace검색주소창에서 커서 앞에 있는 키워드를 삭제합니다.
검색주소창 메뉴에서 키보드 화살표로 항목을 선택한 다음Shift+Delete 키를 누릅니다.가능한 경우 인터넷 사용기록에서 해당 항목을 삭제합니다.
검색주소창 메뉴에서 가운데 마우스 버튼(또는 마우스휠)으로 항목을 클릭합니다.백그라운드의 새 탭에서 해당 항목이 열립니다.
검색주소창 메뉴가 표시되면 Page Up 또는 Page Down키를 누릅니다.메뉴에서 첫 번째 또는 마지막 항목을 선택합니다.

웹페이지 단축키

Ctrl+P현재 페이지를 인쇄합니다.
Ctrl+S현재 페이지를 저장합니다.
F5 또는 Ctrl+R현재 페이지를 새로고칩니다.
Esc현재 페이지의 로드를 중지합니다.
Ctrl+F검색 바를 엽니다.
Ctrl+G 또는 F3검색 바에서 입력한 항목과 일치하는 다음 항목을 찾습니다.
Ctrl+Shift+GShift+F3 또는 Shift+Enter검색 바에서 입력한 항목과 일치하는 이전 항목을 찾습니다.
가운데 마우스 버튼(또는 마우스휠)을 클릭합니다.자동 스크롤을 활성화합니다. 마우스를 움직이면 마우스 방향에 따라 페이지가 자동으로 스크롤됩니다.
Ctrl+F5 또는 Shift+F5캐시된 콘텐츠를 무시하고 현재 페이지를 새로고칩니다.
Alt 키를 누른 상태에서 링크를 클릭합니다.링크 대상을 다운로드합니다.
Ctrl+U현재 페이지의 소스를 엽니다.
링크를 북마크바로 드래그합니다.링크를 북마크로 저장합니다.
Ctrl+D현재 웹페이지를 북마크로 저장합니다.
Ctrl+Shift+D열린 페이지를 모두 새 폴더에 북마크로 저장합니다.
F11페이지를 전체화면 모드로 엽니다. 전체화면을 종료하려면 F11 키를 다시 누릅니다.
Ctrl과 +를 누르거나, Ctrl 키를 누른 상태에서 마우스휠을 위로 스크롤합니다.페이지가 확대됩니다.
Ctrl과 -를 누르거나, Ctrl 키를 누른 상태에서 마우스휠을 아래로 스크롤합니다.페이지가 축소됩니다.
Ctrl+0페이지가 원래 크기로 복원됩니다.
스페이스바웹페이지 아래로 스크롤합니다.
Home페이지 맨 위로 이동합니다.
End페이지 맨 아래로 이동합니다.
Shift 키를 누르고 마우스휠을 스크롤합니다.페이지를 가로로 스크롤합니다.

텍스트 단축키

Ctrl+C강조표시된 콘텐츠를 클립보드로 복사합니다.
Ctrl+V 또는 Shift+Insert클립보드의 콘텐츠를 붙여넣습니다.
Ctrl+Shift+V클립보드의 콘텐츠를 서식 없이 붙여넣습니다.
Ctrl+X 또는 Shift+Delete강조표시된 콘텐츠를 삭제하고 클립보드로 복사합니다.


2013년 5월 26일 일요일

Java Operators

Simple Assignment Operator

=       Simple assignment operator

Arithmetic Operators

+       Additive operator (also used
        for String concatenation)
-       Subtraction operator
*       Multiplication operator
/       Division operator
%       Remainder operator

Unary Operators

+       Unary plus operator; indicates
        positive value (numbers are 
        positive without this, however)
-       Unary minus operator; negates
        an expression
++      Increment operator; increments
        a value by 1
--      Decrement operator; decrements
        a value by 1
!       Logical complement operator;
        inverts the value of a boolean

Equality and Relational Operators

==      Equal to
!=      Not equal to
>       Greater than
>=      Greater than or equal to
<       Less than
<=      Less than or equal to

Conditional Operators

&&      Conditional-AND
||      Conditional-OR
?:      Ternary (shorthand for 
        if-then-else statement)

Type Comparison Operator

instanceof      Compares an object to 
                a specified type 

Bitwise and Bit Shift Operators

~       Unary bitwise complement
<<      Signed left shift
>>      Signed right shift
>>>     Unsigned right shift
&       Bitwise AND
^       Bitwise exclusive OR
|       Bitwise inclusive OR