当前位置:主页 > 查看内容

空域的平滑

发布时间:2021-05-10 00:00| 位朋友查看

简介:第1关邻域平均法 #include BMP.h BMP_Image* MeanFilter ( BMP_Image* Image_In ) { BMP_Image* Image_MeanFilter ; Image_MeanFilter ( BMP_Image* ) malloc ( sizeof ( BMP_Image )) ; Image_MeanFilter- width Image_In- width -2 ; Image_MeanFilter- he……

第1关:邻域平均法


#include "BMP.h"


BMP_Image* MeanFilter(BMP_Image* Image_In)
{

    BMP_Image* Image_MeanFilter;
  	Image_MeanFilter = (BMP_Image*)malloc(sizeof(BMP_Image));

    Image_MeanFilter->width = Image_In->width -2;
    Image_MeanFilter->height = Image_In->height -2;
	Image_MeanFilter->biBitCount = 8;
	Image_MeanFilter->imageRgbQuad = (BMP_RgbQuad*)malloc(sizeof(BMP_RgbQuad)*256);
	Image_MeanFilter->imageData = 	(unsigned char*)malloc((Image_In->height-2)*(Image_In->width-2));

    int i;
    for(i=0;i<256;i++)
	{
	 Image_MeanFilter->imageRgbQuad[i].rgbBlue =     Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MeanFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MeanFilter->imageRgbQuad[i].rgbRed = 	 Image_In->imageRgbQuad[i].rgbRed;
	 Image_MeanFilter->imageRgbQuad[i].rgbReserved = 0;

	 Image_MeanFilter->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MeanFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MeanFilter->imageRgbQuad[i].rgbRed =	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MeanFilter->imageRgbQuad[i].rgbReserved = 0;

	 Image_MeanFilter->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MeanFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MeanFilter->imageRgbQuad[i].rgbRed = 	 Image_In->imageRgbQuad[i].rgbRed;
	 Image_MeanFilter->imageRgbQuad[i].rgbReserved = 0;

	}

//??2¨2ù×÷ê±2?????±??μ£?3*3?ù?μ??2¨μ??°?áê1í?????éù2DD2áD
//?ú??2¨ê±ó|′óμú?tDDμú?táD?aê?μ?μ1êyμú?tDDμú?táD?áê?

    int j,index1,index2,index3,k=0,tmp;

    for (i=1; i<Image_In->height-1; i++)
    {
      for (j=1; j<Image_In->width-1; j++)
        {
		  /********* Begin *********/

            index1 = (i-1)*Image_In->width+j;
            index2 = i*Image_In->width+j;
            index3 = (i+1)*Image_In->width+j;
            tmp = (Image_In->imageData[index1-1] + Image_In->imageData[index1] + Image_In->imageData[index1+1] + Image_In->imageData[index2-1] + Image_In->imageData[index2]  +  Image_In->imageData[index2+1]  +
            Image_In->imageData[index3-1] + Image_In->imageData[index3] + Image_In->imageData[index3+1])/9;
            Image_MeanFilter->imageData[k] = tmp;
            k++;


		  /********* End *********/
	  }
	}
    return Image_MeanFilter;
}

第2关:中值滤波法(3*3)


#include "BMP.h"

int Med(int a,int b,int c)
{
int t;
if(a > b) {t = a; a=b; b=t;}
if(a > c) {t = a; a=c; c=t;}
if(b > c) {t = b; b=c; c=t;}

return b;
}

BMP_Image* MedFilter(BMP_Image* Image_In)
{

    BMP_Image* Image_MedFilter;
  	Image_MedFilter = (BMP_Image*)malloc(sizeof(BMP_Image));


    Image_MedFilter->width = Image_In->width -2;
    Image_MedFilter->height = Image_In->height -2;
	Image_MedFilter->biBitCount = 8;
	Image_MedFilter->imageRgbQuad = (BMP_RgbQuad*)malloc(sizeof(BMP_RgbQuad)*256);
	Image_MedFilter->imageData = 	(unsigned char*)malloc((Image_In->height-2)*(Image_In->width-2));

    int i;
    for(i=0;i<256;i++)
	{

	 Image_MedFilter->imageRgbQuad[i].rgbBlue =      Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter->imageRgbQuad[i].rgbRed = 	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter->imageRgbQuad[i].rgbReserved =  0;

	 Image_MedFilter->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter->imageRgbQuad[i].rgbRed =	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter->imageRgbQuad[i].rgbReserved =  0;

	 Image_MedFilter->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter->imageRgbQuad[i].rgbRed = 	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter->imageRgbQuad[i].rgbReserved =  0;

	}

//??2¨2ù×÷ê±2?????±??μ£?3*3?D?μ??2¨μ??°?áê1í?????éù2DD2áD
//?ú??2¨ê±ó|′óμú?tDDμú?táD?aê?μ?μ1êyμú?tDDμú?táD?áê?

    int j,index1,index2,index3,k=0;

    for (i=1; i<Image_In->height-1; i++)
    {
      for (j=1; j<Image_In->width-1; j++)
        {
		  /********* Begin *********/
            index1=(i-1)*Image_In->width+j;
            index2=i*Image_In->width+j;
            index3=(i+1)*Image_In->width+j;
            int Med1 = Med(Image_In->imageData[index1-1],Image_In->imageData[index1],Image_In->imageData[index1+1]);
            int Med2 = Med(Image_In->imageData[index2-1],Image_In->imageData[index2],Image_In->imageData[index2+1]);
            int Med3 = Med(Image_In->imageData[index3-1],Image_In->imageData[index3],Image_In->imageData[index3+1]);
            int Med4 = Med(Med1,Med2,Med3);
            Image_MedFilter->imageData[k] = Med4;
            k++;



		  /********* End *********/
	  }
	}
    return Image_MedFilter;
}

第3关:中值滤波法(5*5)


#include "BMP.h"
//èy??êy?ó?D?μ
int ForMed(int a,int b,int c)
{
int t;
if(a > b) {t = a; a=b; b=t;}
if(a > c) {t = a; a=c; c=t;}
if(b > c) {t = b; b=c; c=t;}

return b;
}

BMP_Image* MedFilter1(BMP_Image* Image_In)
{

    BMP_Image* Image_MedFilter1;
  	Image_MedFilter1 = (BMP_Image*)malloc(sizeof(BMP_Image));

    Image_MedFilter1->width = Image_In->width -4;
    Image_MedFilter1->height = Image_In->height -4;
	Image_MedFilter1->biBitCount = 8;
	Image_MedFilter1->imageRgbQuad = (BMP_RgbQuad*)malloc(sizeof(BMP_RgbQuad)*256);
	Image_MedFilter1->imageData = 	(unsigned char*)malloc((Image_In->height-4)*(Image_In->width-4));

    int i;
    for(i=0;i<256;i++)
	{

	 Image_MedFilter1->imageRgbQuad[i].rgbBlue =      Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter1->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter1->imageRgbQuad[i].rgbRed = 	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter1->imageRgbQuad[i].rgbReserved =  0;

	 Image_MedFilter1->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter1->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter1->imageRgbQuad[i].rgbRed =	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter1->imageRgbQuad[i].rgbReserved =  0;

	 Image_MedFilter1->imageRgbQuad[i].rgbBlue = 	 Image_In->imageRgbQuad[i].rgbBlue;
	 Image_MedFilter1->imageRgbQuad[i].rgbGreen = 	 Image_In->imageRgbQuad[i].rgbGreen;
	 Image_MedFilter1->imageRgbQuad[i].rgbRed = 	     Image_In->imageRgbQuad[i].rgbRed;
	 Image_MedFilter1->imageRgbQuad[i].rgbReserved =  0;

	}

    int j,index1,index2,index3,index4,index5,k=0;
//??2¨2ù×÷ê±2?????±??μ£?5*5?D?μ??2¨μ??°?áê1í?????éù4DD4áD
//?ú??2¨ê±ó|′óμúèyDDμúèyáD?aê?μ?μ1êyμúèyDDμúèyáD?áê?
    for (i=2; i<Image_In->height-2; i++)
    {
      for (j=2; j<Image_In->width-2; j++)
        {
		  /********* Begin *********/
            index1=(i-2)*Image_In->width+j;
            index2=(i-1)*Image_In->width+j;
            index3=i*Image_In->width+j;
            index4=(i+1)*Image_In->width+j;
            index5=(i+2)*Image_In->width+j;
            int Med1 = ForMed(Image_In->imageData[index1-1],Image_In->imageData[index1],Image_In->imageData[index1+1]);
            int Med2 = ForMed(Image_In->imageData[index2-1],Image_In->imageData[index2],Image_In->imageData[index2+1]);
            int Med3 = ForMed(Image_In->imageData[index3-1],Image_In->imageData[index3],Image_In->imageData[index3+1]);
            int Med4 = ForMed(Image_In->imageData[index4-1],Image_In->imageData[index4],Image_In->imageData[index4+1]);
            int Med5 = ForMed(Image_In->imageData[index5-1],Image_In->imageData[index5],Image_In->imageData[index5+1]);
            int Med6= ForMed(Med1,Med2,Med3);
            int Med7= ForMed(Med4,Med5,Med6);
            Image_MedFilter1->imageData[k] = Med7;
            k++;



		  /********* End *********/
	  }
	}
    return Image_MedFilter1;
}

;原文链接:https://blog.csdn.net/weixin_44196785/article/details/115442723
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐