CODE_ GENRL_APP_MEANFILTER

主要用途:实现对输入图像的平滑。

能力分类:嵌入式

应用领域:便携产品,电源电池,无人机,射频通信,健康医疗

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

MEANFILTER模块实现对输入图像数据的均值滤波。均值滤波是典型的线性滤波算法,实现对输入图像的平滑。

 

1.1  原理及方式

均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(xy),选择一个模板,该模板由其近邻的5x5像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(xy),作为处理后图像在该点上的灰度gxy),即gxy=1/m ∑fxym为该模板中包含当前像素在内的像素总个数。

 

1.2  主要功能

实现对输入图像的平滑。

 标准模块

 模块设计

源图像输入为image_t数据格式,设图像的宽度为width, 高度为height,然后对图像从[2, height - 2]行、[2, width - 2]列的数据进行窗口为5x5的中值滤波。

源图像前两行、最后两行、前两列和最后两列的数据直接赋值给滤波输出图像数据。

函数说明:

函数原型

void NoiseFilter(image_t *src, image_t *dst)

功能描述

均值滤波

输入参数

image_t *src:输入图像数据指针 

输出参数

image_t *dst:输出图像数据指针

 类定义

 应用举例

#include  "incldues.h"

int main(int argc, char *argv[])

 {

const char *file_src, *file_dst;

if (argc != 3) {

printf("Usage: IRENH.exe source_file.png target_file.png\n");

return -1;

}

file_src = argv[1];

file_dst = argv[2];

 

if (FILE *file = fopen(file_src, "r")) {

fclose(file);

} else {

printf("ERROR!!! file %s does not exist.\n", file_src);

return -1;

}

 

cv::Mat img_src;     //原始图像(16bit)

cv::Mat img_dst;     //目标图像(8bit)

int width, height;    //图像尺寸

int status = 0;

img_src = cv::imread(file_src, CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_GRAYSCALE);

width = img_src.cols;                //图像宽度

height = img_src.rows;               //图像高度

img_dst.create(cvSize(width, height), CV_8UC1);


    //原始图像

image_t *src = create_image(

width,                //图像宽度

height,               //图像高度

16,                   //像素位深度

(1 << 16) - 1,          //像素最大值

0                     //像素最小值

);

 

for (int j = 0; j<img_src.rows; j++) {

ushort* ptr = img_src.ptr<ushort>(j);

for (int i = 0; i<img_src.cols; i++) {

src->data[width * j + i] = ptr[i] ;

}

}

 

//目标图像

image_t *dst = create_image(

width,              //图像宽度

height,             //图像高度

8,                  //像素位深度

255,                //像素最大值

0                   //像素最小值

);

    meanFilter(src, dst);

FILE *fp = fopen("text.dat", "w");

for (int j = 0; j<img_dst.rows; j++) {

uchar* ptr = img_dst.ptr(j);

for (int i = 0; i<img_dst.cols; i++) {

ptr[i] = dst->data[width * j + i] >> 8;

}

}

 

cv::imwrite(file_dst, img_dst);

destroy_image(src);

destroy_image(dst);

return 0;

}

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>