RGB图像中值滤波源码


这个代码用VC6.0开发而成,控制台运行,是我在数字图像处理实验课上的拙作,图像源文件和目的文件是.raw原始图像格式。实现3×3模板下的图像中值滤波,修改成其他模板大小也非常方便。包含有源码,示例图像,实验结果演示文档等。
资源截图
代码片段和文件信息
// MidFilter.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
///////////////宏定义和全局变量定义///////////////
#define  W          512             //行总数   
#define  H          512             //列总数   
#define  pixelnum   (W*H)           //总像素数
unsigned char       image[H][W];    //原灰度图像存储数组
unsigned char       Mimage[H][W];    //原灰度图像存储数组
#define WSize       9               //用3*3模板中值滤波
//用于取模板各个象素点的相对位置(第一维表示H相对位置,第二维表示W相对位置)
int     POS[WSize][2]={-1-1-10-110-100011-11011};
////////////////函数声明部分//////////////////////
void RiseSort(int Value[]int Length);
bool MidFilter(char *fileNamechar *midFilterFileName);
///////////////程序主体部分///////////////////////
int main(int argc char* argv[])
{
    char *fileName*midFilterFileName;
fileName = “image/Image44.raw“;     //源图像路径名
midFilterFileName = “image/midFilterFile.raw“; //中值滤波后的图像路径名
    MidFilter(fileNamemidFilterFileName);      //调用均衡化图像
printf(“Press any key to continue...“);
    getchar();
return 0;
}
/*
实现功能:灰度图像中值滤波
参数:char *fileName 要处理的原图像512*512灰度图像
      char *balanceFileName滤波处理后的512*512灰度图像
返回值:滤波成功就返回true失败就返回false 
*/
bool MidFilter(char *fileNamechar *midFilterFileName)
{
    FILE *imageFile;  //图像的文件指针
    int ij;          //循环: i行计数j列计数
int k;            //循环: k用于一维数组遍历
    ////////////////////////读取原raw图像文件到image数组////////////////////
//打开文件
if((imageFile=fopen(fileName“rb“))==NULL) //指向原始文件
{
cout<<“文件打开错误!“< return false; //失败返回
}
//读文件
for(i=0;i    {
      for(j=0;j         { 
             image[i][j]=fgetc(imageFile);              
         }
    }
//关闭文件
    fclose(imageFile);
//////////////////进行中值滤波处理//////////////////
int value[WSize];    //定义临时数组用于存放模板象素值
    //临时数组初始化
for(k=0;k {
value[k]=0;
}
//用原始图像数据 初始化 滤波图像数组(主要是填充边缘象素)
    for(i=0;i    {
for(j=0;j        {
            Mimage[i][j]=image[i][j];
        }
    }
//用模板中值填充模板中心点
for(i=1;i {
for(j=1;j {            
            for(k=0;k<9;k++)//读入模板覆盖的3*3象素
{
value[k]=image[i+POS[k][0]][j+POS[k][1]];
}
            RiseSort(valueWSize);  //对模板下的象素点进行冒泡排序
            Mimage[i][j]=value[4];  //将中值赋给滤波数组
}
}
    ///////////////将滤波数组写入目标文件/////////////////
FILE *midFilterFile;           //均衡化图像的文件指针
//创建文件
    if((midFilterFile=fopen(midFilterFileName“wb“))==NULL) //指向原始文件
{
cout<<“文件打开错误!“< return false; //失败返回
}
//写文件
    for(i=0;i    {
for(j=0;j {
fputc(Mimage[i][j]midFilterFile);                         
}
    }
//关闭文件
    fclose(midFilterFile);
    printf(“中值滤波后的图像已经保存在%s
“midFilterFileName);
//成功返回
return true;
}
/*
实现功能:优化的冒泡排序
参数:int Value[] 要排序的整形数组
      int Length  数组里要排序的长度
返回值: void不返回值(排序后的数组通过数组地址传递回去)
*/
void RiseSort(int Value[]int Length)
{
int ij;     //循环: i控制冒泡趟数;j控制冒泡的数组长

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     目录          0  2006-12-30 13:16  MidFilter

     目录          0  2006-12-30 13:14  MidFilterDebug

     文件     213140  2006-12-30 13:14  MidFilterDebugMidFilter.exe

     文件     252004  2006-12-30 13:14  MidFilterDebugMidFilter.ilk

     文件       9968  2006-12-30 13:14  MidFilterDebugMidFilter.obj

     文件     359456  2006-12-30 10:14  MidFilterDebugMidFilter.pch

     文件     533504  2006-12-30 13:14  MidFilterDebugMidFilter.pdb

     文件       2487  2006-12-30 10:14  MidFilterDebugStdAfx.obj

     文件      50176  2006-12-30 13:14  MidFilterDebugvc60.idb

     文件      69632  2006-12-30 13:14  MidFilterDebugvc60.pdb

     目录          0  2006-12-30 13:14  MidFilterimage

     文件     262144  2006-12-03 11:22  MidFilterimageImage44.raw

     文件     262144  2006-12-30 13:14  MidFilterimagemidFilterFile.raw

     文件       3901  2006-12-30 13:14  MidFilterMidFilter.cpp

     文件       4572  2006-12-30 09:52  MidFilterMidFilter.dsp

     文件        526  2006-12-30 09:52  MidFilterMidFilter.dsw

     文件      50176  2006-12-30 13:16  MidFilterMidFilter.ncb

     文件      48640  2006-12-30 13:16  MidFilterMidFilter.opt

     文件       1414  2006-12-30 13:14  MidFilterMidFilter.plg

     文件       1226  2006-12-30 09:52  MidFilterReadMe.txt

     文件        296  2006-12-30 09:52  MidFilterStdAfx.cpp

     文件        830  2006-12-30 10:14  MidFilterStdAfx.h

     文件    1102767  2007-04-25 22:21  MidFilter可执行文件和实验结果.rar

----------- ---------  ---------- -----  ----

              3229003                    23


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)