資源簡介
雙邊濾波 純C++實現,支持8位灰度圖像和24位真彩圖像
代碼片段和文件信息
#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? {
for?(j?=?0;?j? {
for?(i?=?0;?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? {
for(int?i?=?0;i? {
for(int?j?=?0;?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? {
for?(j?=?0;?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? {
for?(j?=?0;?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? {
for?(i?=?nFilter_y;?i? {
for?(j?=?nFilter_x;?j? {
GetFinalKernal(pRgbImgnFilterWidthnFilterHeightpdKernaldFinalKernalijkrgbWidthlImgLength);
GetWindowArray(ijkpRgbImgpArraynFilterHeightnFilterWidthrgbWidthlIm
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-11-02?21:15??BilateralFilter\
?????目錄???????????0??2016-11-02?21:13??BilateralFilter\BilateralFilter\
?????文件????77791232??2016-11-02?21:15??BilateralFilter\BilateralFilter.sdf
?????文件?????????912??2016-11-01?15:53??BilateralFilter\BilateralFilter.sln
?????文件???????25600??2016-11-02?21:15??BilateralFilter\BilateralFilter.v11.suo
?????文件?????5832054??2016-11-02?21:09??BilateralFilter\BilateralFilter\Bilateral.bmp
?????文件????????6675??2016-11-02?21:15??BilateralFilter\BilateralFilter\Bilateral.cpp
?????文件?????????507??2016-11-02?20:03??BilateralFilter\BilateralFilter\Bilateral.h
?????文件????????3034??2016-11-02?21:15??BilateralFilter\BilateralFilter\BilateralFilter.cpp
?????文件??????????39??2016-11-01?15:53??BilateralFilter\BilateralFilter\BilateralFilter.h
?????文件????????2652??2016-11-01?15:53??BilateralFilter\BilateralFilter\BilateralFilter.rc
?????文件????????5117??2016-11-01?16:41??BilateralFilter\BilateralFilter\BilateralFilter.vcxproj
?????文件????????1834??2016-11-01?16:36??BilateralFilter\BilateralFilter\BilateralFilter.vcxproj.filters
?????文件?????????164??2016-11-01?16:39??BilateralFilter\BilateralFilter\BilateralFilter.vcxproj.user
?????目錄???????????0??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\
?????文件??????105243??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\Bilateral.obj
?????文件????????2888??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.Build.CppClean.log
?????文件??????????80??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.lastbuildstate
?????文件????????2807??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.log
?????文件??????108809??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.obj
?????文件????34078720??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.pch
?????文件?????????128??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\BilateralFilter.res
?????文件????????2606??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\cl.command.1.tlog
?????文件???????38376??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\CL.read.1.tlog
?????文件????????1976??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\CL.write.1.tlog
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
?????文件???????????2??2016-11-02?21:13??BilateralFilter\BilateralFilter\Debug\li
............此處省略55個文件信息
評論
共有 條評論