【问题标题】:Problem with averaging corrupted images to eliminate the noise in MATLAB在 MATLAB 中对损坏的图像进行平均以消除噪声的问题
【发布时间】:2011-01-27 19:58:06
【问题描述】:

我想平均一些被零均值高斯加性噪声破坏的 .jpg 图像。在四处搜索之后,我想出了添加图像矩阵并将总和除以矩阵的数量。但是,生成的图像是全黑的。通常,当图像数量增加时,生成的图像会变得更好。但是当我使用更多图像时,它会变暗。

我使用的是 800x600 黑白 .jpg 图片。这是我使用的脚本:

image1 = imread ('PIC1.jpg');
image2 = imread ('PIC2.jpg');
image3 = imread ('PIC3.jpg');
image4 = imread ('PIC4.jpg');

sum = image1 + image2 + image3 + image4; 
av = sum / 4; 
imshow(av);

【问题讨论】:

    标签: image matlab image-manipulation corruption noise


    【解决方案1】:

    问题可能是图像数据的类型都是uint8,因此将它们全部相加会导致像素值饱和值为 255,从而为您提供大部分为白色的图像,然后最终看起来大部分为黑色然后除以图像数量时。您应该将图像转换为另一种数据类型,例如double,然后执行平均,然后再转换回uint8

    % Load your images:
    image1 = imread('PIC1.jpg');
    image2 = imread('PIC2.jpg');
    image3 = imread('PIC3.jpg');
    image4 = imread('PIC4.jpg');
    
    % Convert the images to type double and sum them:
    imageSum = double(image1) + double(image2) + double(image3) + double(image4);
    
    % Divide by the number of images and convert back to type uint8:
    averageImage = uint8(imageSum./4);
    
    % Display the averaged image:
    imshow(averageImage);
    

    旁注:您应该避免为变量提供与任何现有函数相同的名称,因为这可能会导致问题/混乱。这就是为什么我将变量sum改为imageSum(有一个内置函数sum)。

    【讨论】:

    • 非常感谢你,伙计!我在猜测图像的类型,实际上我将它们转换为双精度,但我没有将结果转换回 UNIT8。再次感谢。
    【解决方案2】:

    使用图像处理工具箱中的IMLINCOMB 的替代解决方案:

    I = imlincomb(0.25,I1, 0.25,I2, 0.25,I3, 0.25,I4);
    

    【讨论】:

    • imlincomb 解决方案很好,因为它不会制作任何双精度图像副本。并且输出图像与输入图像类型相同(uint8),所以不用担心缩放问题。
    【解决方案3】:

    你也可以使用 imagesc(averageImage); 此功能具有自动缩放图像并且不会显示为黑色

    【讨论】:

    • IMSHOW 的等价物是:imshow(averageImage, [])(请注意求和时的饱和问题)
    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 2017-04-14
    • 2013-08-01
    • 1970-01-01
    • 2019-06-03
    • 2018-06-08
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多