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

来源:互联网 发布:excel2003软件官方下载 编辑:程序博客网 时间:2024/05/02 02:25

原型说明:


包含的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;}


0 0