📄 img_median_3x3_c.c
字号:
/* ----------------------------------------------------------------------- */
/* Copyright (c) 2002 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/* ======================================================================= */
void IMG_median_3x3_c(unsigned char * in_data, int cols, unsigned char * out_data)
{
unsigned char * line0, * line1, *line2;
int l00_0, l01_0, l02_0, l10_0, l11_0, l12_0, l20_0, l21_0, l22_0;
int l00_1, l10_1, l10_2, l10_3, l20_1, l20_2;
int t0_1, t1_1, t1_2;
int i, minmax_0, maxmin_0, medmed_0;
int minmax_1, medmed_1, medmed_2, medmed_3;
line0 = in_data;
line1 = line0 + cols;
line2 = line1 + cols;
/* l00 l01 l02 max's */
/* l10 l11 l12 med's */
/* l20 l21 l22 min's */
l01_0 = l11_0 = l21_0 = 127;
l02_0 = l12_0 = l22_0 = 127;
minmax_0 = l02_0;
maxmin_0 = l22_0;
for (i = 0; i < cols; i++)
{
l00_0 = *line0++;
l10_0 = *line1++;
l20_0 = *line2++;
// sort l00_0, l10_0, l20_0
l20_1 = l20_0; l10_1 = l10_0;
if (l20_0 > l10_0) { l10_1 = l20_0; l20_1 = l10_0; } // swap
l00_1 = l00_0; l10_2 = l10_1;
if (l10_1 > l00_0) { l00_1 = l10_1; l10_2 = l00_0; } // swap
l20_2 = l20_1; l10_3 = l10_2;
if (l20_1 > l10_2) { l10_3 = l20_1; l20_2 = l10_2; } // swap
if (l01_0 < minmax_0) minmax_0 = l01_0; /* Compute min of max */
if (l00_1 < minmax_0) minmax_0 = l00_1;
if (l21_0 > maxmin_0) maxmin_0 = l21_0; /* Comput max of min */
if (l20_2 > maxmin_0) maxmin_0 = l20_2;
// sort l10 l11 l12
t0_1 = l10_3; /* Compute median of median */
t1_1 = l11_0;
if (l10_3 > l11_0)
{
t0_1 = l11_0;
t1_1 = l10_3;
}
t1_2 = t1_1;
if (t1_1 > l12_0)
{
t1_2 = l12_0;
}
medmed_0 = t1_2;
if (t0_1 > t1_2) { medmed_0 = t0_1; } // swap
// minmax, medmed, maxmin
medmed_1 = medmed_0; minmax_1 = minmax_0;
if (minmax_0 > medmed_0) { medmed_1 = minmax_0; minmax_1 = medmed_0; }
medmed_2 = medmed_1;
if (medmed_1 > maxmin_0) { medmed_2 = maxmin_0; }
medmed_3 = medmed_2;
if (minmax_1 > medmed_2) { medmed_3 = minmax_1; }
/* Move data along by one column */
minmax_0 = l01_0;
l12_0 = l11_0;
maxmin_0 = l21_0;
l01_0 = l00_1;
l11_0 = l10_3;
l21_0 = l20_2;
*out_data++ = medmed_3;
}
}
/*============================================================================*/
/* Copyright (c) 2002 Texas Instruments, Incorporated. */
/* All Rights Reserved. */
/*============================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -