双边滤波 纯C++实现,支持8位灰度图像和24位真彩图像
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-02 21:15 BilateralFilter
目录 0 2016-11-02 21:13 BilateralFilterBilateralFilter
文件 77791232 2016-11-02 21:15 BilateralFilterBilateralFilter.sdf
文件 912 2016-11-01 15:53 BilateralFilterBilateralFilter.sln
文件 25600 2016-11-02 21:15 BilateralFilterBilateralFilter.v11.suo
文件 5832054 2016-11-02 21:09 BilateralFilterBilateralFilterBilateral.bmp
文件 6675 2016-11-02 21:15 BilateralFilterBilateralFilterBilateral.cpp
文件 507 2016-11-02 20:03 BilateralFilterBilateralFilterBilateral.h
文件 3034 2016-11-02 21:15 BilateralFilterBilateralFilterBilateralFilter.cpp
文件 39 2016-11-01 15:53 BilateralFilterBilateralFilterBilateralFilter.h
文件 2652 2016-11-01 15:53 BilateralFilterBilateralFilterBilateralFilter.rc
文件 5117 2016-11-01 16:41 BilateralFilterBilateralFilterBilateralFilter.vcxproj
文件 1834 2016-11-01 16:36 BilateralFilterBilateralFilterBilateralFilter.vcxproj.filters
文件 164 2016-11-01 16:39 BilateralFilterBilateralFilterBilateralFilter.vcxproj.user
目录 0 2016-11-02 21:13 BilateralFilterBilateralFilterDebug
文件 105243 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateral.obj
文件 2888 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.Build.CppClean.log
文件 80 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.lastbuildstate
文件 2807 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.log
文件 108809 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.obj
文件 34078720 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.pch
文件 128 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.res
文件 2606 2016-11-02 21:13 BilateralFilterBilateralFilterDebugcl.command.1.tlog
文件 38376 2016-11-02 21:13 BilateralFilterBilateralFilterDebugCL.read.1.tlog
文件 1976 2016-11-02 21:13 BilateralFilterBilateralFilterDebugCL.write.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-cvtres.read.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-cvtres.write.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-mt.read.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-mt.write.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-rc.read.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebuglink-rc.write.1.tlog
............此处省略55个文件信息
#include
#include
#include “stdafx.h“
#include “Bilateral.h“
bool ImageFilter(unsigned char* imageint Widthint Heightint BandNumunsigned char* outimage)
{
int rgbWidth = Width;
int rgbHeight = Height;
int rgbBandnum = BandNum;
int ijk; //定义循环变量
unsigned char* pRgbImg = nullptr; //用于存储原始图像数据
//开辟原始图像数据内存空间,输入为灰度图像,缺省设为1个颜色通道
pRgbImg = new unsigned char[rgbBandnum * rgbHeight * rgbWidth];
//读取图像原始数据,并存储到定义的变量中
long lImgLength = rgbWidth * rgbHeight;
for (int k = 0; k < rgbBandnum; k++)
{
for (j = 0; j < rgbHeight; j++)
{
for (i = 0; i < rgbWidth; i++)
{
pRgbImg[(i + j * rgbWidth) + k * lImgLength] = image[i + j * rgbWidth + k * lImgLength];
}
}
}
//2.第二步:进行高斯滤波算法设计
//2.1步:定义高斯滤波相关变量
unsigned char *pImgFilter=NULL; //存储高斯滤波后的数据
pImgFilter=new unsigned char[rgbBandnum * rgbWidth*rgbHeight];
// memset(pImgFilter0sizeof(unsigned char)*rgbWidth*rgbHeight);
//2016.9.19 9:00 zs更改,为完全消除边界黑边,先给输出图像赋值为输入图像
for (int k= 0; k < rgbBandnum; k++)
{
for(int i = 0;i < rgbHeight;++i)
{
for(int j = 0; j < rgbWidth;++j)
{
pImgFilter[i * rgbWidth + j + k * lImgLength] = image[i * rgbWidth + j + k * lImgLength];
}
}
}
int nFilterWidth = 9; //滤波器宽度
int nFilterHeight = 9; //滤波器高度
double dSigmaGuass = 3; //滤波参数方差
unsigned char *pArray = new unsigned char[nFilterWidth*nFilterHeight]; //保存窗口内的像素灰度值
double *pdKernal = new double[nFilterWidth*nFilterHeight]; //高斯核数组
int nCentre_x = nFilterWidth/2;
int nCentre_y = nFilterHeight/2;
double dSum = 0.0; //求和,用于权系数归一化
//得到高斯滤波器权系数
for (i = 0; i < nFilterHeight; i++)
{
for (j = 0; j < nFilterWidth; j++)
{
int nDis_x = i-nCentre_x;
int nDis_y = j-nCentre_y;
//pdKernal[j+i*nFilterWidth] = exp(-(1/2)*(nDis_x*nDis_x+nDis_y*nDis_y)/(dSigma*dSigma))
pdKernal[j+i*nFilterWidth] = exp(-(1./2.)*(nDis_x*nDis_x+nDis_y*nDis_y)/(dSigmaGuass*dSigmaGuass));//zs9.24 11:30改
//高斯公式的表示
dSum = dSum + pdKernal[j+i*nFilterWidth];
}
}
//权系数归一化
for (i = 0; i < nFilterHeight; i++)
{
for (j = 0; j < nFilterWidth; j++)
{
pdKernal[j+i*nFilterWidth] = pdKernal[j+i*nFilterWidth]/dSum;
// std::cout< }
// std::cout< }
// double* dPixelKernal = new double[nFilterWidth*nFilterHeight];//值域核
double* dFinalKernal = new double[nFilterWidth*nFilterHeight];//最终的核函数
int nFilter_x=nFilterWidth/2;
int nFilter_y=nFilterHeight/2; //用于索引窗口内的数值
for (int k = 0; k < rgbBandnum; k++)
{
for (i = nFilter_y; i < rgbHeight-nFilter_y; i++) //一般i对应高度,j对应宽度,先是i不变,j增加
{
for (j = nFilter_x; j < rgbWidth-nFilter_x; j++)
{
GetFinalKernal(pRgbImgnFilterWidthnFilterHeightpdKernaldFinalKernalijkrgbWidthlImgLength);
GetWindowArray(ijkpRgbImgpArraynFilterHeightnFilterWidthrgbWidthlIm
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-02 21:15 BilateralFilter
目录 0 2016-11-02 21:13 BilateralFilterBilateralFilter
文件 77791232 2016-11-02 21:15 BilateralFilterBilateralFilter.sdf
文件 912 2016-11-01 15:53 BilateralFilterBilateralFilter.sln
文件 25600 2016-11-02 21:15 BilateralFilterBilateralFilter.v11.suo
文件 5832054 2016-11-02 21:09 BilateralFilterBilateralFilterBilateral.bmp
文件 6675 2016-11-02 21:15 BilateralFilterBilateralFilterBilateral.cpp
文件 507 2016-11-02 20:03 BilateralFilterBilateralFilterBilateral.h
文件 3034 2016-11-02 21:15 BilateralFilterBilateralFilterBilateralFilter.cpp
文件 39 2016-11-01 15:53 BilateralFilterBilateralFilterBilateralFilter.h
文件 2652 2016-11-01 15:53 BilateralFilterBilateralFilterBilateralFilter.rc
文件 5117 2016-11-01 16:41 BilateralFilterBilateralFilterBilateralFilter.vcxproj
文件 1834 2016-11-01 16:36 BilateralFilterBilateralFilterBilateralFilter.vcxproj.filters
文件 164 2016-11-01 16:39 BilateralFilterBilateralFilterBilateralFilter.vcxproj.user
目录 0 2016-11-02 21:13 BilateralFilterBilateralFilterDebug
文件 105243 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateral.obj
文件 2888 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.Build.CppClean.log
文件 80 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.lastbuildstate
文件 2807 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.log
文件 108809 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.obj
文件 34078720 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.pch
文件 128 2016-11-02 21:13 BilateralFilterBilateralFilterDebugBilateralFilter.res
文件 2606 2016-11-02 21:13 BilateralFilterBilateralFilterDebugcl.command.1.tlog
文件 38376 2016-11-02 21:13 BilateralFilterBilateralFilterDebugCL.read.1.tlog
文件 1976 2016-11-02 21:13 BilateralFilterBilateralFilterDebugCL.write.1.tlog
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
文件 2 2016-11-02 21:13 BilateralFilterBilateralFilterDebugli
............此处省略55个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)