双边滤波器 Bilateral Filtering for Gray and Color Images
2016-10-11 21:01
721 查看
双边滤波(bilateral filter)是一种非线性滤波器,算法结合空间信息(像素的坐标)和亮度相似性(像素值0-255)对图像进行滤波处理,在平滑滤波的同时能大量保留图像的边缘和细节特征 。
积分,通用均值滤波和高斯滤波,f(x)为输入图像,h(x)为输出图像
:
1/kd(x)为归一化参数,保证绝对平滑的位置灰度值不变。
积分下:空间信息(像素的坐标):
积分下:亮度相似性(像素值0-255):
权重系数W( i, j, k,
l)对应积分的表示:
对应的,离散求和,f(i,j)为输入图像,g(i,j)为输出图像 ,以输入图像(k,l)为中心的邻域,求和范围是模板覆盖的范围:
离散下:空间信息(像素的坐标):
离散下:亮度相似性(像素值0-255):
权重系数W(
i, j, k, l)=d( i, j, k, l) * r(
i, j, k, l):
其中
为空域(像素的坐标)高斯函数的标准差,
为值域(像素值0-255)高斯函数的标准差。空域滤波系数由像素间的空间距离决定,距离越小,系数越大。值域滤波系数由像素间的相似度决定,像素值越接近,系数越大。
双边滤波效果图(delta_d=3;//空间位置方差
delta_r=100;//亮度方差)
void CShowPicView::OnBilateralFilter() // 双边滤波
{
CShowPicDoc* pDoc = GetDocument();
CDC* pDC=GetDC();
// 字符串
CString str;
int x,y;
int i,j,k,l;
double W_ijkl, D_ijkl, R_ijkl;
double Sum_W_ijkl;
double delta_d=3,delta_r=100;//空间位置方差,亮度方差
unsigned char g[610][800]={0};//存放输出图像的像素值
double Sum_Data;
// 滤波器的高度
int iFilterH= 11;
// 滤波器的宽度
int iFilterW= 11;
// 中心元素的X坐标
int iFilterMX= 5;
// 中心元素的Y坐标
int iFilterMY= 5;
int lHeight=intHeight;//图像的宽
int lWidth=intWidth;//图像的宽
// 行(除去边缘几行)
for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++)
{
// 列(除去边缘几列)
for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++)
{
Sum_W_ijkl=0;//图像中心位置移动,置零
Sum_Data=0;
for (k = i-5; k < iFilterH+i-5; k++)
{
for (l = j-5; l < iFilterW+j-5; l++)
{
D_ijkl = exp(-1 * (pow(k-i,2)+pow(l-j,2))/(2*delta_d*delta_d) );
R_ijkl = exp(-1 * pow(Data[k][l]-Data[i][j],2)/(2*delta_r*delta_r) );
W_ijkl = D_ijkl*R_ijkl;
Sum_Data+=W_ijkl*Data[k][l];
Sum_W_ijkl += W_ijkl;//权重累加和
}
}
g[i][j]=Sum_Data/Sum_W_ijkl;
}
}
for(y = 0; y < intHeight-1; y++)
for(int x = 0; x < intWidth-1; x++)
pDC->SetPixel(x+1*intWidth+30,y,RGB(g[y][x],g[y][x],g[y][x]));
//打点显示图像
}
积分,通用均值滤波和高斯滤波,f(x)为输入图像,h(x)为输出图像
:
1/kd(x)为归一化参数,保证绝对平滑的位置灰度值不变。
积分下:空间信息(像素的坐标):
积分下:亮度相似性(像素值0-255):
权重系数W( i, j, k,
l)对应积分的表示:
对应的,离散求和,f(i,j)为输入图像,g(i,j)为输出图像 ,以输入图像(k,l)为中心的邻域,求和范围是模板覆盖的范围:
离散下:空间信息(像素的坐标):
离散下:亮度相似性(像素值0-255):
权重系数W(
i, j, k, l)=d( i, j, k, l) * r(
i, j, k, l):
其中
为空域(像素的坐标)高斯函数的标准差,
为值域(像素值0-255)高斯函数的标准差。空域滤波系数由像素间的空间距离决定,距离越小,系数越大。值域滤波系数由像素间的相似度决定,像素值越接近,系数越大。
双边滤波效果图(delta_d=3;//空间位置方差
delta_r=100;//亮度方差)
void CShowPicView::OnBilateralFilter() // 双边滤波
{
CShowPicDoc* pDoc = GetDocument();
CDC* pDC=GetDC();
// 字符串
CString str;
int x,y;
int i,j,k,l;
double W_ijkl, D_ijkl, R_ijkl;
double Sum_W_ijkl;
double delta_d=3,delta_r=100;//空间位置方差,亮度方差
unsigned char g[610][800]={0};//存放输出图像的像素值
double Sum_Data;
// 滤波器的高度
int iFilterH= 11;
// 滤波器的宽度
int iFilterW= 11;
// 中心元素的X坐标
int iFilterMX= 5;
// 中心元素的Y坐标
int iFilterMY= 5;
int lHeight=intHeight;//图像的宽
int lWidth=intWidth;//图像的宽
// 行(除去边缘几行)
for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++)
{
// 列(除去边缘几列)
for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++)
{
Sum_W_ijkl=0;//图像中心位置移动,置零
Sum_Data=0;
for (k = i-5; k < iFilterH+i-5; k++)
{
for (l = j-5; l < iFilterW+j-5; l++)
{
D_ijkl = exp(-1 * (pow(k-i,2)+pow(l-j,2))/(2*delta_d*delta_d) );
R_ijkl = exp(-1 * pow(Data[k][l]-Data[i][j],2)/(2*delta_r*delta_r) );
W_ijkl = D_ijkl*R_ijkl;
Sum_Data+=W_ijkl*Data[k][l];
Sum_W_ijkl += W_ijkl;//权重累加和
}
}
g[i][j]=Sum_Data/Sum_W_ijkl;
}
}
for(y = 0; y < intHeight-1; y++)
for(int x = 0; x < intWidth-1; x++)
pDC->SetPixel(x+1*intWidth+30,y,RGB(g[y][x],g[y][x],g[y][x]));
//打点显示图像
}
相关文章推荐
- 双端滤波器应用于灰度和彩色图像Bilateral Filtering for Gray and Color Images
- 图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
- Bilateral Filtering for Gray and Color Images
- 图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
- 图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
- 图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
- 图像处理之双边滤波效果(Bilateral Filtering for Gray and Color Image)
- Bilateral Filtering(双边滤波) for SSAO
- caffe matlab 借口怎么提取灰度图的 feature ? What happened if I mixed the color images with gray images together for training ?
- 翻译A Multiscale Retinex for Bridging the Gap Between Color Images and the Human Observation of Scenes
- Bilateral Filtering(双边滤波) for SSAO
- Bilateral Filtering(双边滤波) for SSAO(转)
- 关于专利APPROACH FOR RESOLVING OCCLUSIONS, SPLITS AND MERGES IN VIDEO IMAGES
- Programming Computer Vision with Python: Tools and algorithms for analyzing images
- QML Color and Images
- State of the "Art": A Taxonomy of Artistic Stylization Techniques for Images and Video(五)
- codeforcs 351 C. Bear and Color
- Joint Bilateral Filtering 双边滤波
- 双边滤波(bilateral filtering)
- Icons and launch images for iPhone and iPad apps