Q&A

  • 도와주세여~~~ 이미지 프로세싱 관련입니다.
영상 인식처리의 소벨이라는 알고리즘입니다.

소벨이라는 것은 이미지의 윤곽부분만을 추출하는 것입니다.

명도가 짙은곳과 낮은 곳을 추출하여 그 부분만을 reDraw

하는 것이지요.. 그런데 도저히 델파이로 구현하기가

힘들더군요...



꼭 구현을 해야 하는데

이미지 프로세싱에 자신있는 분 ..좀 도와주세요..

아래의 것은 비쥬얼 c++ 로 작성한 부분의 핵심부분인데

정말 잘되여...



그 아래는 제가 작성하다만 델파이 소스입니다

꼭 아시는분 도와주세요..

델파이로 구현이 가능한지... 흐

---------------------------------------------------------------

void CTestDoc::Sobel()

{

int centerValue1=0;

int centerValue2=0;

int sum=0;

unsigned char m_tmpImg[258][258];



int mask1[3][3]={ -1,0,1,

-2,0,2,

-1,0,1};

int mask2[3][3]={ 1,2,1,

0,0,0,

-1,-2,-1};



for(int k=1; k<257; k++){

for(int l=1; l<257; l++){

m_tmpImg[k][l]=m_OpenImg[k-1][l-1];

}

}



for(int row=0; row<256; row++){

for(int column=0; column<256; column++){

for(int i=0; i<3; i++){

for(int j=0; j<3; j++){

centerValue1 += m_tmpImg[i+row][j+column]*mask1[i][j];

centerValue2 += m_tmpImg[i+row][j+column]*mask2[i][j];

}

}

sum=abs(centerValue1)+abs(centerValue2);

if(sum>255)sum=255;

m_ResultImg[row+1][column+1]=(unsigned char)sum;

centerValue1=0;

centerValue2=0;

sum=0;

}

}

}







void CTestView::OnDraw(CDC* pDC)

{

CTestDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);



// TODO: add draw code for native data here

//Original Image 출력

for(int y=0; y<256; y++)

{

for(int x=0; x<256; x++)

{

pDC->SetPixel(x,y,RGB(pDoc->m_OpenImg[y][x],

pDoc->m_OpenImg[y][x],

pDoc->m_OpenImg[y][x]));

}

}



//Result Image 출력

if(zoom !=1 && zoom !=2)

{

for(y=0; y<256; y++)

{

for(int x=0; x<256; x++)

{

pDC->SetPixel(x+300,y,RGB(pDoc->m_ResultImg[y][x],

pDoc->m_ResultImg[y][x],

pDoc->m_ResultImg[y][x]));

}

}

}

---------------------------------------------------------------











델파이로

만들다 만 소스

//-------------------------------------------------------------/

// 소벨 연산 알고리즘 적용 (윤곽선 추출)

//-------------------------------------------------------------/

procedure Sobel(bmp1:TBitmap);

var

centervalue1,centervalue2,sum:Integer;

mask1 : array[0..2,0..2] of integer;

mask2 : array[0..2,0..2] of integer;

w_size,h_size, n,m,i,j:Integer;



begin

centervalue1:=0; centervalue2:=0; sum:=0; //변수 초기화

w_size:=bmp1.Width; h_size:=bmp1.Height; //이미지 사이즈 기억



mask1[0,0]:=-1; mask1[0,1]:=0; mask1[0,2]:=1;//x축 미분 변수

mask1[1,0]:=-2; mask1[1,1]:=0; mask1[1,2]:=2;

mask1[2,0]:=-1; mask1[2,1]:=0; mask1[2,2]:=1;



mask2[0,0]:=1; mask2[0,1]:=2; mask2[0,2]:=1;//y축 미분 변수

mask2[1,0]:=0; mask2[1,1]:=0; mask2[1,2]:=0;

mask2[2,0]:=-1; mask2[2,1]:=-2; mask2[2,2]:=-1;



for n:=0 to w_size-1 do begin

for m:=0 to h_size-1 do begin



for i:=0 to 2 do begin

for j:=0 to 2 do begin

centervalue1:=centervalue1+

bmp1.Canvas.Pixels[i+n,j+m] * mask1[i,j];



centervalue2:=centervalue2+

bmp1.Canvas.Pixels[i+n,j+m] * mask2[i,j];

end;

end;



sum:=abs(centervalue1)+ abs(centervalue2);//x,y 미분값 저장

if sum > 255 then sum:=255; //Saturation 기법 적용

bmp1.Canvas.Pixels[n+1,m+1]:= sum;

centervalue1:=0;

centervalue2:=0;

sum:=0;

end;

end

end;

//------------------------------------------------------------/





1  COMMENTS
  • Profile
    박상윤 2001.02.07 09:04
    저희 회사 홈을 참고하세여..

    기본적인 이미지 프로세싱알고리즘을

    델파이로 구현했구여...

    Q/A가보시면 소스두 있을 거에여...



    나노시스 //www.nanosys.co.kr