-
大小: 40.51MB文件類型: .zip金幣: 1下載: 0 次發(fā)布日期: 2023-07-10
- 語言: C/C++
- 標簽: 雙邊濾波??純C++實現(xiàn)??
資源簡介
雙邊濾波 純C++實現(xiàn),支持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;???????????????????????????????????//定義循環(huán)變量
unsigned?char*?pRgbImg?=?nullptr; //用于存儲原始圖像數(shù)據(jù)
//開辟原始圖像數(shù)據(jù)內(nèi)存空間,輸入為灰度圖像,缺省設為1個顏色通道
pRgbImg?=?new?unsigned?char[rgbBandnum?*?rgbHeight?*?rgbWidth];?????
//讀取圖像原始數(shù)據(jù),并存儲到定義的變量中
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;????//存儲高斯濾波后的數(shù)據(jù)
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;??????//濾波參數(shù)方差
unsigned?char?*pArray?=?new?unsigned?char[nFilterWidth*nFilterHeight];??//保存窗口內(nèi)的像素灰度值
double?*pdKernal?=?new?double[nFilterWidth*nFilterHeight];?//高斯核數(shù)組
int?nCentre_x?=?nFilterWidth/2;
int?nCentre_y?=?nFilterHeight/2;
double?dSum?=?0.0;?//求和,用于權系數(shù)歸一化
//得到高斯濾波器權系數(shù)
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];
}
}
//權系數(shù)歸一化
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];//最終的核函數(shù)
int?nFilter_x=nFilterWidth/2;
int?nFilter_y=nFilterHeight/2;????????????????????????????//用于索引窗口內(nèi)的數(shù)值
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個文件信息
評論
共有 條評論