You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现图像处理中值滤波嵌套循环失效、输出灰度值一致问题求助

中值滤波代码问题修复方案

1. 主函数掩膜尺寸校验的致命语法错误

  • 问题根源:校验代码中误将不等于运算符!=写反为=!,等价于执行赋值操作som = !3,由于3是非0值,!3结果为0,所以无论输入什么合法掩膜尺寸,som都会被强制覆盖为0。后续所有和som相关的循环判断条件(如i<som)都不成立,因此循环完全不执行,符合你描述的“循环不生效、打印无输出”的现象。
  • 修复代码:
// 原错误代码:if(som=!3 && som!=5 && som!=7)
if(som!=3 && som!=5 && som!=7) {printf("\n [size of the mask] should be 3, 5 or 7\n"); exit(0);}

2. 掩膜像素读取逻辑错误

  • 问题根源:sort_masking函数中遍历掩膜的内层循环里,列坐标错误使用了行循环变量i,导致只能读取到掩膜的对角线像素,没有遍历整个掩膜区域,计算的中值完全错误。
  • 修复代码:
// 原错误代码:mask_out[i*som+j] = img_mask[rn+i][cn+i];
mask_out[i*som+j] = img_mask[rn+i][cn+j];

3. 迭代次数参数未生效

  • 问题根源:median函数完全没有用到输入的迭代次数参数noi,无论输入多少次迭代,都只会执行1次滤波。
  • 修复方案:在median函数中增加迭代逻辑,每次迭代用上一次的输出作为下一次的输入,示例代码:
unsigned char **median(unsigned char **img, int som, int noi,int NC, int NR){
    int i,j, iter;
    unsigned char **img_out = alloc_img(NC,NR);
    unsigned char **temp_in, **temp_out, **swap;
    
    // 初始化输出为原图
    for(i=0;i<NR;i++){
        for(j=0;j<NC;j++){
            img_out[i][j] = img[i][j];
        }
    }
    // 迭代noi次
    for(iter=0; iter<noi; iter++){
        temp_in = img_out;
        temp_out = alloc_img(NC,NR);
        for(i=0;i<(NR-som+1);i++){
            for(j=0;j<(NC-som+1);j++){
                temp_out[i+(som-1)/2][j+(som-1)/2] = sort_masking(temp_in,som,i,j);
            }
        }
        // 交换输入输出,释放临时内存
        swap = temp_in;
        img_out = temp_out;
        free_img(swap);
    }
    return img_out;    
}

4. 内存泄漏问题修复

  • 修复sort_masking的内存泄漏:每次返回中值前释放malloc的mask_out
unsigned char sort_masking(unsigned char **img_mask,int som, int rn, int cn){
    // 原有逻辑不变
    unsigned char res = mask_out[(som*som-1)/2];
    free(mask_out); // 新增释放逻辑
    return res;
}
  • 修复主函数的内存泄漏:删除多余的img2 = alloc_img(NC,NR);,因为median函数已经会分配新的内存
  • 修复内存释放逻辑:自定义free_img函数适配你alloc_img的分配结构,不要直接free(img2)
void free_img(unsigned char **img){
    free(img[0]);
    free(img);
}
// 主函数中释放img2改为调用free_img(img2);

内容的提问来源于stack exchange,提问作者Taylan Mert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:09