【发布时间】:2014-11-14 16:13:43
【问题描述】:
我正在使用框过滤算法来进行 RGB 图像模糊。但结果真的很糟糕。我根本无法识别原始图像。
图片的数据存储在数组Data[Width*Height*3]中,顺序为BGRBGRBGR……而kernel是一个9x9的盒子。
这是我的盒子过滤功能:
void MyImage::BoxFiltering(vector<int> kernel){
char *temp = new char[Width * Height * 3];
int denominator = 0;
int indexOffset;
int red = 0, blue = 0, green = 0;
int indices[] = {-(Width + 1), -Width, -(Width - 1),
- 1, 0, 1,
Width - 1, Width, Width + 1};
for(int i = 0; i < kernel.size(); ++i){
denominator += kernel[i];
}
if(denominator == 0)
denominator = 1;
//Copy Data
for(int i = 0; i < Width * Height * 3; ++i){
temp[i] = Data[i];
}
for(int i = 1; i < Height - 1; ++i){
for(int j = 1; j < Width - 1; ++j){
//Get Pixel Index
indexOffset = getIndex(j, i);
for(int k = 0; k < kernel.size(); ++k){
blue += Data[3 * (indexOffset + indices[k])] * kernel[k];
green += Data[3 * (indexOffset + indices[k]) + 1] * kernel[k];
red += Data[3 * (indexOffset + indices[k]) + 2] * kernel[k];
}
temp[3 * indexOffset] = static_cast<char>(blue / denominator);
temp[3 * indexOffset + 1] = static_cast<char>(green / denominator);
temp[3 * indexOffset + 2] = static_cast<char>(red / denominator);
}
}
for(int i = 0; i < Width * Height * 3; ++i){
Data[i] = temp[i];
}
delete [] temp;
}
谁能帮我弄清楚我的实现有什么问题?谢谢!
【问题讨论】:
标签: c++ algorithm image-processing