BÁO CÁO BÀI THỰC HÀNH MÔN XỬ LÝ ẢNH - Pdf 19

B
B
Á
Á
O
OC
C
Á
Á
O
OB
B
À
À
I
IT
T
H
H


C

L
Ý
ÝẢ

N
N
H
HL
L


P
P
:
:K
K
1
1
0
0
T

trong xử lý ảnh. Chương trình này chỉ là bước khởi đầu cho một sự tích hợp tất
cả các thuật toán cơ sở vào trong một chương trình, đây sẽ là một trong những
chương trình giúp người sử dụng hiểu rõ hơn về một số thuạt toán cơ sở trong
xử lý ảnh.
Trong khuôn khổ của một bài tập thực hành, ở đây xin được trình bày 4 thuật
toán cơ sở bao gồm: Giãn nở ảnh (làm béo), Ăn mòn ảnh (làm gầy), Xoay ảnh
và tìm xương.
Giao diện toàn cảnh của chương trình sẽ được hiển thị như hình dưới đây:

Hình 1
Dưới đây sẽ trình bày chi tiết các thuật toán trên.
2
Load ảnh và lưu ảnh sau khi xử lý
Load ảnh: Đây là chức năng đầu tiên của chương trình cho phép load một ảnh
bitmap 256 mầu để xử lý.
Lưu ảnh: Là chức năng cho phép lưu trữ ảnh sau khi xử lý dưới dang 1 tệp
tin.
Sự giãn nở ảnh (Dilation)
Ảnh ở Hình 1 là ảnh trước khi xử lý (Ảnh gốc, ảnh tiền xử lý). Sau khi thực
hiện chức năng giãn nở (Dilation) ta thu được ảnh như hình dưới đây:

Hình 2: Ảnh thu được sau khi thực hiện chức năng giãn nở lần 2
Chú y: Số lần giãn nở trong một chừng mực nào đó có thể coi là không hạn
chế
Sự ăn mòn ảnh (Erosion)
Ảnh ở Hình 1 là ảnh trước khi xử lý (Ảnh gốc, ảnh tiền xử lý). Sau khi thực
hiện chức năng ăn mòn ảnh (Erosion) ta thu được ảnh như hình dưới đây:

3
Hình 3: Ảnh thu được sau khi thực hiện chức năng ăn mòn lần 2

void IMAGE::Dilation(int M){
int i,j,k,z;
char TAM=2;
char*pCot,*pPic,*pDong,*pCot1,*pDong1;
int n,m2;

pPic=(char*)GlobalLock(hPic);
6
m2=M*2+1;
n=M+M*MaxX;

for(pDong=pPic,i=0;i<MaxY;i++,pDong+=MaxX)
for(pCot=pDong,j=0;j<max;j++,pCot++){
if(pCot[0]==TAM){
pCot[0]=DEN;
continue;
}//if
if(j<M||i<M||j>=max-M||i>=MaxY-M) continue;

if(pCot[0]==DEN){
pDong1=pCot-n;
for(k=0;k<m2;k++,pDong1+=MaxX)
for(pCot1=pDong1,z=0;z<m2;z++,pCot1++){
if(pCot1[0]!=TRANG) continue;
if(pCot1<pCot) pCot1[0]=DEN;
else pCot1[0]=TAM;
}//for
}//if
}//for


if(pCot1[0]!=DEN) continue;
if(pCot1<pCot) pCot1[0]=TRANG;
else pCot1[0]=TAM;
}//for
}//if
}//for

GlobalUnlock(hPic);
return;
}//

Thủ tục xoay ảnh
/////////////////////////////////////////////////////////////////////////////
//int IMAGE::Rotate(float angle): ham xoay anh
// (khong dung phep nhan va phep chia)
/////////////////////////////////////////////////////////////////////////////
int IMAGE::Rotate(float angle){
char *pPic,*pDong,*pCot;
char *pPic1,*pDong1,*pCot1;
float tongDongX,tongDongY,tongCotX,tongCotY;
float cos1,sin1;
HGLOBAL hPic1;
int xDong,yDong,xCot,yCot;
int i,j;
int denTa;

cos1=(float)cos(angle);
sin1=(float)sin(angle);
hPic1=GlobalAlloc(GMEM_MOVEABLE,MaxX*MaxY);
if(!hPic1) return 0;

else if(tongCotX<=-1){
tongCotX+=1.0;
pCot ;
xCot ;
}//if
if(tongCotY>=1){
tongCotY-=1.0;
pCot+=MaxX;
yCot++;
}//if
else if(tongCotY<=-1){
tongCotY+=1.0;
pCot-=MaxX;
yCot ;
}//if

}//for

tongDongX-=sin1;
tongDongY+=cos1;
if(tongDongX>=1){
tongDongX-=1.0;
pDong++;
xDong++;
}//if
else if(tongDongX<=-1){
tongDongX+=1.0;
pDong ;
xDong ;
}//if

// -Danh dau bien T2=2N (moi diem den duyet <=2 lan)
// -Xoa Danh dau T3=2N (moi diem den duyet <=2 lan)
//-Dung 2 lan ham next: T4=2N
// (moi diem den cua lop bien ngoai se duoc duyet 1 lan)
//-Xet diem kep: T5= N
// (moi diem den cua lop bien trong se duoc duyet 1 lan)
//-Chuyen xuong thanh diem den: T6=N (duyet qua anh)
// Vay do phuc tap Tmax=9N (chu y:Dilation co do phuc tap 9N)
// va khi anh dong nhat den thi do phuc tap la 9N
//////////////////////////////////////////////////////////////////////////////////////////////

int IMAGE::ThinChar9N(){

char *pCot,*pDong,*pPic;
LIST<NetBien> lBien;
NetBien*loBien;
int i,j;
int nBien;
struct NetBien tam;
int ok,k;

pPic=(char*)GlobalLock(hPic);

Lap1LoTrong();
Xoa4DuongBien1();

// do bien cac bien ban dau
nBien=0;
lBien.ResetList();
for( pDong=pPic,j=0;j<MaxY;j++,pDong+=MaxX)

lBien.Destroy();
return 0;
}//if

lBien.GotoHead();
for(i=0;i<nBien;i++,lBien+=1){
loBien=lBien.Lock(0);
DanhDauXoa(loBien[0]);
lBien.UnLock(0);
}//for

}while(nBien!=0);//while

// chuyen nhung diem xuong thanh diem den
for( pDong=pPic,j=0;j<MaxY;j++,pDong+=MaxX)
for( pCot=pDong,i=0;i<max;i++,pCot++){
if(pCot[0]!=TRANG) pCot[0]=DEN;
}//for

return 1;
}


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status