Matlab消除异常值,matlab – 从灰度图像中删除异常值

我有一个代表我想要清理的深度信息的图像序列.

有一些异常值(强度低于25的值,0-255范围),我希望用一个可接受的替代方案填充(局部特定区域的平均值可能是一个很好的猜测).

有人能看到一个简单的方法吗?我试图使用中值滤波器(滤波器大小为10)用NaN代替不需要的值,但它确实使情况恶化,相反通过用一般平均值代替它们来改善.

附:有人已经建议我使用快速小波重建,但我真的不知道从哪里开始……

实施解决方案(到目前为止)

我实现的解决方案(在阅读tmpearce建议的inpaint_nans之前)是:

>复制原始图像;

>用一般平均值填充无效像素;

>使用光线10的圆盘使其模糊;

>用我从第3点得到的值替换原始图像中的无效值.

>运行大小为10的中值过滤器.

img2 = img;

img2(img < .005) = mean(img(:));

H = fspecial('disk',10);

img3 = imfilter(img2,H,'symmetric');

img4 = img;

img4(img < .3) = img3(img < .3);

filterSize = 10;

padopt = {'zeros','indexed','symmetric'};

IMG = medfilt2(img4, [1 1]*filterSize, padopt{p});

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
形态学检测在Matlab可以使用morphological operations函数实现。以下是一个基于形态学检测的异常图片检测示例代码: ```matlab % 读入图像序列 imageDir = 'image_folder'; % 图像文件夹路径 imageFiles = dir(fullfile(imageDir, '*.jpg')); % 获取所有jpg格式的图像文件 numImages = length(imageFiles); % 定义结构元素 se = strel('disk', 10); % 定义半径为10的圆形结构元素 % 循环处理每张图像 for i = 1:numImages % 读入图像 imageFile = fullfile(imageDir, imageFiles(i).name); img = imread(imageFile); % 应用形态学开运算 imgOpen = imopen(img, se); % 计算图像差异 diff = imabsdiff(img, imgOpen); diffGray = rgb2gray(diff); % 判断是否为异常图像 if mean(diffGray(:)) > 10 % 如果图像差异的平均值超过10,认为是异常图像 disp(['Image ', num2str(i), ' is an anomaly.']); % 在原图上标注异常区域 imgDiff = imoverlay(img, diffGray, [1 0 0]); % 显示原图和标注后的图像 figure, imshowpair(img, imgDiff, 'montage'); else disp(['Image ', num2str(i), ' is normal.']); end end ``` 该代码会读入一个图像文件夹的所有jpg格式图像,并对每一张图像进行形态学开运算。开运算可以平滑图像并去除小的噪声点。然后,计算原图像与开运算后的图像的差异,并将差异图像转换为灰度图像。如果差异图像的平均值超过一个阈值(这里设为10),则认为原图像是异常图像,否则是正常图像。对于异常图像,代码会在原图像上标注异常区域并显示原图和标注后的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值