2014-02-09 2 views
0

나는 이미지에서 두 좌표를 선택할 수있는 이미지 분석 프로그램을 작성 중이다. 그런 다음 두 점을 기준으로 이미지를 직사각형으로 자릅니다. 그러면 프로그램에서 이미지의 히스토그램 분포를 찾습니다.Java에서 고정 크기 블록을 사용하여 이미지를 스캔하는 방법은 무엇입니까?

문제는 자른 이미지를 자른 이미지와 다른 이미지 (imagetwo)와 비교하고 싶다는 것입니다. 나의 현재 계획은 자르기 된 이미지와 동일한 크기의 블록을 만들고 나서 imagetwo를 가로 질러 이동하면서 히스토그램 분포를 계산하여 imagetwo를 스캔하는 것입니다. 블록들은 잘라내어 진 이미지와 비교된다.

어떻게하면됩니까? 나는 이것이 for 루프를 필요로한다는 것을 알고 있지만 논리를 해결하기 위해 고심하고있다. 원경

코드 로직 :

//Size of cropped image 
int width = croppedimage.getWidth(); 
int height = croppedimage.getHeight(); 

Image tempImage; 
Image imageTwo; 

//Match pattern 
for(x=0; x<width; x++){ 
for(y=0; y<height; y++){ 
    tempImage.addPixel(imageTwo.get(x,y); 
} 
} 

이 두 이미지의 잘라낸 화상의 크기의 첫 번째 블록을 검색한다. 그러나 한 번에 한 픽셀 씩 imageTwo를 따라 블록을 이동하고 싶습니다.

+0

나는 약간 혼란 스러워요. 기본적으로 이미지에서 사각형을 자릅니다. 그런 다음 원본 이미지의 가능한 모든 창에 대해 원본 이미지에서 같은 크기의 창을 자른 이미지로 정의합니다. 히스토그램은 같은 위치에서 일치합니까? – Jason

+0

동일한 각도의 두 이미지가 있습니다 (즉, 같은 나무를 두 장 찍었습니다). 이 이미지는 동일한 세부 정보 중 일부를 공유하지만 다른 사진에는 세부 정보를 표시하지 않습니다. 나는 현재 사용자가 이미지 중 작은 부분을 꺼내 다른 이미지에 있는지 확인한 다음 이미지가 일치하면 일치하는 이미지를 병합합니다. – user2916314

답변

1

이미지의 히스토그램을 얻고, 두 개의 히스토그램을 비교하고, 이미지를 자르기 위해 세 가지 기능이 필요합니다. 또한, 히스토그램은 그레이 스케일 이미지 (또는 별도로 프로세스 컬러 채널)에서만 작동하기 때문에, 우리가 작업하고있는 것은 그레이 스케일 이미지라고 가정 할 것입니다.

의 당신이 그 세 가지 기능을 가지고 있다고 가정하자 :

public int[] getHistogram(BufferedImage image){ ... } 
public float getRelativeCorrelation(int[] hist1, int[] hist2){ ... } 
public BufferedImage cropImage(BufferedImage image, int x, int y, int width, int height){ ... } 

그런 다음 루프가 모든 비교에서 볼 수 있습니다 :

BufferedImage scene = ... ;// The image that you want to test 
BufferedImage roi = ... ; //The cropped region of interest selected by your user 


int sceneWidth = scene.getWidth(); 
int sceneHeight = scene.getHeight(); 
int roiWidth = roi.getWidth(); 
int roiHeight = roi.getHeight(); 

int[] histROI = getHistogram(roi); 

for (int y=0;y<sceneHeight-roiHeight+1;y++){ 
    for (int x=0;x<sceneWidth-roiWidth+1;x++){ 

      BufferedImage sceneROI = cropImage(scene, x,y, roiWidth, roiHeight); 
      int[] histSceneROI = getHistogram(sceneROI); 

      float comparison = getRelativeCorrelation(histROI, histSceneROI); 

      //todo: something with the comparison. 

    } 
} 
관련 문제