Matlab提升图像亮度时,像素值超255的判断修正代码失效问题
解决Matlab中像素值溢出后if判断失效的问题
问题根源:
imread读取PGM图像返回的是uint8类型数组,该类型数值范围固定为0-255。当你给像素值加270时,超出范围的数值会自动取模256循环(比如0+270实际存储为14,255+270实际存储为13),导致m1(i,j)永远达不到255,if判断自然不会触发。
解决方案1:转换为浮点类型计算后转回uint8
先把图像数组转成double类型(支持更大数值范围),完成加法和截断后再转回uint8:
m1 = imread('owl.pgm'); m2 = imread('mecca06.pgm'); % 代码中读取了m2但未使用,可按需保留 % 转换为double类型避免溢出 m1_double = double(m1); for i = 1:size(m1_double,1) for j = 1:size(m1_double,2) m1_double(i,j) = m1_double(i,j) + 270; if m1_double(i,j) >= 255 m1_double(i,j) = 255; end end end % 转回uint8类型 m1 = uint8(m1_double); figure imshow(m1)
解决方案2:用向量运算替代循环(更高效)
Matlab对向量运算优化更好,无需嵌套循环,一行代码即可完成:
m1 = imread('owl.pgm'); m2 = imread('mecca06.pgm'); % 转double加值后,用min函数直接截断到255,再转回uint8 m1 = uint8(min(double(m1) + 270, 255)); figure imshow(m1)
内容的提问来源于stack exchange,提问作者Fahaad Munir
相关产品推荐
相关产品推荐

