CS50 PSet4 Filter-more:模糊函数代码异常求助(3x3/4x4图像失效)
图像模糊函数Bug排查
核心问题:边界判断的笔误
你的代码里存在一个低级笔误,直接导致3x3、4x4这类小尺寸图像的模糊计算完全错误:
在邻域像素的列边界判断中,你把j+l写成了j+1:
// 错误代码 if((j+l)<0 || (j+1)>=width)
这个错误会让程序错误地跳过大量有效邻域像素:
- 对于小尺寸图像,比如3x3宽的图,当处理最后一列(j=2)时,
j+1=3等于width,会直接跳过所有l偏移的像素,导致sum和counter计算完全错误 - 大尺寸图像的中间像素因为
j+1远小于width,这个错误不会触发,所以看起来中间、边缘像素好像正常,但实际边缘区域的计算依然是错的,只是小图的错误更显眼
修正方案
把判断条件里的j+1改成正确的j+l即可:
// 修正后的代码 if((j+l)<0 || (j+l)>=width)
验证说明
修正后,邻域像素的边界判断会正确识别哪些像素在图像范围内,sum和counter的计算会准确对应当前像素的所有有效邻域(最多9个,边缘角落会更少),模糊结果就能符合预期。
内容的提问来源于stack exchange,提问作者TSH
相关产品推荐
相关产品推荐

