现在的位置: 首页 > 综合 > 正文

一些滤波操作1403:图像处理基础部分

2018年11月05日 ⁄ 综合 ⁄ 共 4297字 ⁄ 字号 评论关闭

原型说明:

包含的h头文件

#define WHITE 255
#define BLACK 0

#include<stdio.h>
#include<malloc.h>

int medfilt5(unsigned char *imagein,unsigned char *imageout, int size[2]);
int iminflate(unsigned char *imagein,int str[25],unsigned char *imageout,int size[2]);
int imbrim(unsigned char *imagein,unsigned char *imageout,int threshold,int size[2]);

源码

#include"imft.h"

int medfilt5(unsigned char *imagein,unsigned char *imageout, int size[2])
{
	int i,j,m,n;
	char temp;
	char nerbour[25];
	for(i = 2; i < size[1] - 2; i ++ )
	{
		for(j = 2; j < size[0] - 2; j++ )
		{
			nerbour[0] = *(imagein + (i-2) * size[0] + j-2 );		nerbour[1] = *(imagein + (i-2) * size[0] + j-1 );		nerbour[2] = *(imagein + (i-2) * size[0] + j );		nerbour[3] = *(imagein + (i-2) * size[0] + j+1 );		nerbour[4] = *(imagein + (i-2) * size[0] + j+2 );
			nerbour[5] = *(imagein + (i-1) * size[0] + j-2 );		nerbour[6] = *(imagein + (i-1) * size[0] + j-1 );		nerbour[7] = *(imagein + (i-1) * size[0] + j );		nerbour[8] = *(imagein + (i-1) * size[0] + j+1 );		nerbour[9] = *(imagein + (i-1) * size[0] + j+2 );
			nerbour[10] = *(imagein + (i) * size[0] + j-2 );		nerbour[11] = *(imagein + (i) * size[0] + j-1 );		nerbour[12] = *(imagein + (i) * size[0] + j );		  nerbour[13] = *(imagein + (i) * size[0] + j+1 );		nerbour[14] = *(imagein + (i) * size[0] + j+2 );
			nerbour[15] = *(imagein + (i+1) * size[0] + j-2 );		nerbour[16] = *(imagein + (i+1) * size[0] + j-1 );		nerbour[17] = *(imagein + (i+1) * size[0] + j );	nerbour[18] = *(imagein + (i+1) * size[0] + j+1 );		nerbour[19] = *(imagein + (i+1) * size[0] + j+2 );
			nerbour[20] = *(imagein + (i+2) * size[0] + j-2 );		nerbour[21] = *(imagein + (i+2) * size[0] + j-1 );		nerbour[22] = *(imagein + (i+2) * size[0] + j );	nerbour[23] = *(imagein + (i+2) * size[0] + j+1 );		nerbour[24] = *(imagein + (i+2) * size[0] + j+2 );
			for( m = 0; m < 24; m++ )
			{
				for( n = 0; n < 24; n++ )
				{
					if(nerbour[n] < nerbour[n+1])
					{
						temp = nerbour[n+1];
						nerbour[n+1] = nerbour[n];
						nerbour[n] = temp;
					}
				}
			}
			*(imageout + i*size[0] + j) = nerbour[12];
		}
	}
	for(i = 0; i < size[1]; i++)
	{
		*(imageout+ i*size[0]) = *(imagein + i * size[0] );
		*(imageout+ i*size[0] + 1) = *(imagein + i * size[0] + 1);
		*(imageout+ i*size[0] + size[0] - 2) = *(imagein + i * size[0] + size[0] - 2);
		*(imageout+ i*size[0] + size[0] - 1) = *(imagein + i * size[0] + size[0] - 1);
	}
	for(i = 0; i < size[0]; i++)
	{
		*(imageout+ j) = *(imagein + i);
		*(imageout+ size[0] + i) = *(imagein + size[0] + i);
		*(imageout+ size[0] * (size[1] - 2) + i) = *(imagein + (size[1] - 2) * size[0] + i);
		*(imageout+ size[0] * (size[1] - 1) + i) = *(imagein + (size[1] - 1) * size[0] + i);
	}
	return 0;
}

int iminflate(unsigned char *imagein,int str[25],unsigned char *imageout,int size[2])
{
	int i,j;
	for(i = 2; i < size[1] - 2; i++)
	{
		for(j = 2; j < size[0] - 2; j++)
		{
			if( *(imagein + i * size[0] + j) == WHITE)
			{
				*(imageout + (i-2) * size[0] + j-2 ) = str[0] * WHITE;		*(imageout + (i-2) * size[0] + j-1 ) = str[1] * WHITE;		*(imageout + (i-2) * size[0] + j ) = str[2] * WHITE;		*(imageout + (i-2) * size[0] + j+1 ) = str[3] * WHITE;		*(imageout + (i-2) * size[0] + j+2 ) = str[4] * WHITE;
				*(imageout + (i-1) * size[0] + j-2 ) = str[5] * WHITE;		*(imageout + (i-1) * size[0] + j-1 ) = str[6] * WHITE;		*(imageout + (i-1) * size[0] + j ) = str[7] * WHITE;		*(imageout + (i-1) * size[0] + j+1 ) = str[8] * WHITE;		*(imageout + (i-1) * size[0] + j+2 ) = str[9] * WHITE;
				*(imageout + (i) * size[0] + j-2 ) = str[10] * WHITE;		*(imageout + (i) * size[0] + j-1 ) = str[11] * WHITE;		*(imageout + (i) * size[0] + j ) = str[12] * WHITE;		  *(imageout + (i) * size[0] + j+1 ) = str[13] * WHITE;		*(imageout + (i) * size[0] + j+2 ) = str[14] * WHITE;
				*(imageout + (i+1) * size[0] + j-2 ) = str[15] * WHITE;		*(imageout + (i+1) * size[0] + j-1 ) = str[16] * WHITE;		*(imageout + (i+1) * size[0] + j ) = str[17] * WHITE;	*(imageout + (i+1) * size[0] + j+1 ) = str[18] * WHITE;		*(imageout + (i+1) * size[0] + j+2 ) = str[19] * WHITE;
				*(imageout + (i+2) * size[0] + j-2 ) = str[20] * WHITE;		*(imageout + (i+2) * size[0] + j-1 ) = str[21] * WHITE;		*(imageout + (i+2) * size[0] + j ) = str[22] * WHITE;	*(imageout + (i+2) * size[0] + j+1 ) = str[23] * WHITE;		*(imageout + (i+2) * size[0] + j+2 ) = str[24] * WHITE;
			}
		}
	}
	return 0;
}

int imbrim(unsigned char *imagein,unsigned char *imageout,int threshold,int size[2])
{
	int i,j,bt;
	for(i = 1; i < size[1] - 1; i++)
	{
		for(j = 1; j < size[0] - 1; j++)
		{
			bt = *(imagein + (i-1) * size[0] + j-1) + *(imagein + (i-1) * size[0] + j) + *(imagein + (i-1) * size[0] + j+1)
				+*(imagein + i * size[0] + j-1) - 8 * (*(imagein + i * size[0] + j) ) + *(imagein + i * size[0] + j+1)
				+*(imagein + (i+1) * size[0] + j-1) + *(imagein + (i+1) * size[0] + j) + *(imagein + (i+1) * size[0] + j+1);
			if( bt >= threshold )
				*(imageout + i * size[0] + j) = WHITE;
			else
				*(imageout + i * size[0] + j) = BLACK;
		}
	}
	for(i = 0; i < size[1]; i++)
	{
		*(imageout + i * size[0]) = BLACK;
		*(imageout + i * size[0] + 1) = BLACK;
		*(imageout + i * size[0] + 2) = BLACK;
		*(imageout + i * size[0] + size[0] - 1) = BLACK;
		*(imageout + i * size[0] + size[0] - 2) = BLACK;
		*(imageout + i * size[0] + size[0] - 3) = BLACK;
	}
	for(i = 0; i < size[0]; i++)
	{
		*(imageout + 0 * size[0] + i) = BLACK;
		*(imageout + 1 * size[0] + i) = BLACK;
		*(imageout + 2 * size[0] + i) = BLACK;
		*(imageout + (size[1] - 1) * size[0] + i) = BLACK;
		*(imageout + (size[1] - 2) * size[0] + i) = BLACK;
		*(imageout + (size[1] - 3) * size[0] + i) = BLACK;
	}
	return 0;
}

抱歉!评论已关闭.