接下來,我們試著把影像作不同程式的模糊
一階3x3遮罩的模糊輸出的程式:
int effect(ImageData *img,ImageData *outimg)
{
int fil[9]={
1, 1, 1,
1, 1, 1,
1, 1, 1};
int val;
int x1,y1,x2,y2;
int x,y;
int xx,yy;
int ff;
int rr,gg,bb;
Pixel pix;
x1=0;
y1=0;
x2=img->width-1;
y2=img->height-1;
for(y=y1;y<=y2;y++) {
for(x=x1;x<=x2;x++) {
val=0;
ff=0;
rr=gg=bb=0;
for(yy=-1;yy<=1;yy++) {
for(xx=-1;xx<=1;xx++) {
val = getPixel(img,x+xx,y+yy,&pix);
rr += pix.r * fil[ff];
gg += pix.g * fil[ff];
bb += pix.b * fil[ff];
ff++;
}
}
pix.r=rr/9;
pix.g=gg/9;
pix.b=bb/9;
setPixel(outimg,x,y,&pix);
}
}
return 1;
}
一階3x3遮罩圖形:
=======================分格線=======================
二階3x3遮罩的模糊輸出的程式:
int effect(ImageData *img,ImageData *outimg)
{
int fil[9]={
1, 2, 1,
2, 4, 2,
1, 2, 1};
int val;
int x1,y1,x2,y2;
int x,y;
int xx,yy;
int ff;
int rr,gg,bb;
Pixel pix;
x1=0;
y1=0;
x2=img->width-1;
y2=img->height-1;
for(y=y1;y<=y2;y++) {
for(x=x1;x<=x2;x++) {
val=0;
ff=0;
rr=gg=bb=0;
for(yy=-1;yy<=1;yy++) {
for(xx=-1;xx<=1;xx++) {
val = getPixel(img,x+xx,y+yy,&pix);
rr += pix.r * fil[ff];
gg += pix.g * fil[ff];
bb += pix.b * fil[ff];
ff++;
}
}
pix.r=rr/16;
pix.g=gg/16;
pix.b=bb/16;
setPixel(outimg,x,y,&pix);
}
}
return 1;
}
二階3x3遮罩圖形:
我們先修改加權比率
=======================分格線=======================
根據影像模糊化的理論公式中得出
只要我們把周邊的加權比率提高,輸出影像愈是模糊
所以我們來驗證一下
所以我把周邊的比率提高,而中心點數值固定
多階3x3遮罩的模糊輸出的程式:
int effect(ImageData *img,ImageData *outimg)
{
int fil[9]={
64, 64, 64,
64, 1, 64,
64, 64, 64};
int val;
int x1,y1,x2,y2;
int x,y;
int xx,yy;
int ff;
int rr,gg,bb;
Pixel pix;
x1=0;
y1=0;
x2=img->width-1;
y2=img->height-1;
for(y=y1;y<=y2;y++) {
for(x=x1;x<=x2;x++) {
val=0;
ff=0;
rr=gg=bb=0;
for(yy=-1;yy<=1;yy++) {
for(xx=-1;xx<=1;xx++) {
val = getPixel(img,x+xx,y+yy,&pix);
rr += pix.r * fil[ff];
gg += pix.g * fil[ff];
bb += pix.b * fil[ff];
ff++;
}
}
pix.r=rr/513;
pix.g=gg/513;
pix.b=bb/513;
setPixel(outimg,x,y,&pix);
}
}
return 1;
}
多階3x3遮罩圖形:
=======================分格線=======================
效果看似不太明顯
所以我們需要把比率拉更大
大比率3x3遮罩的模糊輸出的程式:
int effect(ImageData *img,ImageData *outimg)
{
int fil[9]={
16, 0, 16,
0, -16, 0,
16, 0, 16};
int val;
int x1,y1,x2,y2;
int x,y;
int xx,yy;
int ff;
int rr,gg,bb;
Pixel pix;
x1=0;
y1=0;
x2=img->width-1;
y2=img->height-1;
for(y=y1;y<=y2;y++) {
for(x=x1;x<=x2;x++) {
val=0;
ff=0;
rr=gg=bb=0;
for(yy=-1;yy<=1;yy++) {
for(xx=-1;xx<=1;xx++) {
val = getPixel(img,x+xx,y+yy,&pix);
rr += pix.r * fil[ff];
gg += pix.g * fil[ff];
bb += pix.b * fil[ff];
ff++;
}
}
pix.r=rr/48;
pix.g=gg/48;
pix.b=bb/48;
setPixel(outimg,x,y,&pix);
}
}
return 1;
}
大比率3x3遮罩圖形:
=======================不同比率3x3遮罩結果=======================
上圖為原始影像
上圖為一階3x3遮罩
上圖為二階3x3遮罩
上圖為多階3x3遮罩
上圖為大比率3x3遮罩
結論:
在固定3x3遮罩的情況下,影像周邊的加權比率提高,輸出影像愈是模糊
但由於3x3的遮罩,可參考的影像周邊有限(只有8格),因此影像只能作有限度的模糊