Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Trang
11
/
25
Để dễ hiểu, phần dưới đây sẽ minh hoạ thêm về giải thuật này:
Ma trận ảnh vào Mặt nạ
a11 a12 a13 a1n
a21 a22 a23 a2n
a31 a32 a33 a3n m11 m12 m13
m21 m22 m23
m31 m32 m33
Ma trận ảnh ra sau khi nhân chập
b11 b12 b13 b1n
b21 b22 b23 b2n
b31 b32 b33 b3n Trong đó:
b22=(a11*m11)+ (a12*m12)+ (a12*m13)+ (a21*m21) + (a22*m22) +
(a23*m23) + (a31*m31)+ (a32*m32)+ (a33*m33).
Các giá trị nằm trên đường viền được gán =0 (hay giá trị màu nền).
(b11,b12, b1n,b11 bn1,b1n bnn, bn1 bnn)
Đây là công thức tính Gx và Gy
else
{
- Tính xấp xỉ Laplace G: nhân chập với mặt nạ I1
- Nếu giá trị điểm ảnh lớn hơn chỉ số màu của ảnh thì
gán giá trị ảnh là giá trị màu lớn nhất.
}
2.3.3. Phương pháp dò biên gián tiếp
Dựa trên kỹ thuật phân vùng ảnh, Phương pháp này dò biên theo sự
thay đổi mức xám màu của ảnh. Nếu những điểm ảnh nào có cùng màu hoặc
có màu khác nhưng khoảng cách màu nằm trong phạm vi cho phép, đồng
thời nằm kề nhau sẽ tạo thành một vùng.
Định nghĩa khoảng cách màu:
Khoảng cách màu là một khái niệm để chỉ sự khác nhau về giá trị
màu của các điểm ảnh.
Giả sử a và b là 2 giá trị màu của 2 điểm ảnh. Khoảng cách màu d
của a và b được tính như sau:
d(a,b)=|Ra-Rb| + |Ga-Gb| + |Ba-Bb|
Trong đó Ra: là giá trị màu đỏ tại điểm ảnh
Ga: là giá trị màu xanh (green)tại điểm ảnh
Ba: là giá trị màu xanh da trời (blue) tại điểm ảnh.
Nếu khoảng cách màu d=0 thì 2 điểm ảnh đó có cùng màu.
Đường biên giữ các vùng chính là các đường biên cần tìm.
Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Trang
13
/
25
Bao gồm hai chức năng:
o Sobel
o Prewitt Kết quả dò biên theo kỹ thuật Gradient với toán tử Sobel
Kết quả dò biên theo kỹ thuật Gradient với toán tử Sobel
Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Trang
15
/
25
Nhận xét:
Khi áp dụng hai toán tử này cho ta cùng một kết quả tương tự nhau
Phương pháp này tạo nên đường biên rất đậm
2.4.3. Chức năng Laplace
Chức năng này bao gồm
chức năng Laplace-h2: sử dựng mặt nạ H2 Kết quả dò biên theo kỹ thuật Laplace
Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Gx[2][0] = -1; Gx[2][1] = 0; Gx[2][2] = 1;
Gy[0][0] = -1; Gy[0][1] = -1; Gy[0][2] = -1;
Gy[1][0] = 0; Gy[1][1] = 0; Gy[1][2] = 0;
Gy[2][0] = 1; Gy[2][1] = 1; Gy[2][2] = 1;
Gradient(Gx,Gy);
// image->Filter(kernel,3,16,0);
UpdateAllViews(NULL);
}
Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Trang
18
/
25bool CDemo3Doc::Gradient(long Gx[3][3], long Gy[3][3])
{
//neu khong co du lieu anh
if(!image->GetDIB()) return false;
// Gradient Algorithm
long sum;
long sumx,sumy;//gia tri tinh gx, gy
long x,y;
//long r,g,b;
long i,j,gx,gy;
//RGBQUAD c;
//CxImage tmp;
Tiểu luận môn xử lý ảnh - Biên và các phương pháp dò biên
Trang
19
/
25
//tinh theo chieu x
for( i=-1; i<=1 ; i++)
for(j=-1; j<=1; j++)
{
//lay gia tri mau
CString s1;
cindex=image-
>GetPixelIndex(x+i,y+j);
gx=Gx[i+1][j+1];
sumx=sumx+ (cindex* gx);
}
//tinh theo chieu y
for( i=-1; i<=1 ; i++)
for(j=-1; j<=1; j++)
{
//lay gia tri mau
cindex=image-
>GetPixelIndex(x+i,y+j);
gy=Gy[i+1][j+1];
sumy=sumy+ (cindex* gy);
//CxImage tmp;
//tmp.Copy (*img); long xmin,xmax,ymin,ymax;
BYTE preindex,posindex,index;
xmin = ymin = 0;
xmax =(long) img->GetWidth(); ymax=(long)img->GetHeight();
//neu anh la 8bit/1pixel
if ((image->GetBpp() ==8) || (image->GetBpp() ==4))
{
for(y=ymin; y<ymax; y++)
{
for(x=xmin; x<xmax; x++)
{
preindex=img->GetPixelIndex(x-1,y-1) ;
index=img->GetPixelIndex(x,y) ;
posindex=img->GetPixelIndex(x+1,y+1) ;
//neu index tai diem x,y khong lon hon tai diem x-1,y-1
va x+1,y+1 thi loai bo
if ((index<=preindex || index<=posindex))
img->SetPixelColor( x,y,RGB(0,0,0)); //dat mau
den
}
}
}