Matlab中的图像处理/恢复

时间:2018-03-01 17:44:34

标签: matlab image-processing

我想要从工件中纠正几张图像。他们展示了不同的动物,但看起来看起来像是折叠的(看附图)。褶皱是直的,它们也穿过翅膀,它们很难看到,但它们在那里。我想删除折叠,但同时保留图片中的信息(翅膀的结构和颜色)。 我现在正在使用MATLAB,我尝试了几种方法,但似乎没有任何工作。

最初,我试图通过使用FFT来查看是否可以看到任何内容,但我看不到可以移除的光谱中的结构。我尝试使用几种边缘检测方法(如索贝尔等),但问题是边缘检测总是找到翅膀的边缘(因为它们更强) 而不是直线。我想知道是否有人对如何处理这个问题有任何想法?我没有附加任何代码,因为我尝试(和描述)的方法都没有。

提前感谢您的帮助。

Example

2 个答案:

答案 0 :(得分:3)

对于知道如何在不影响图像质量的情况下清除这些线条的人,我会留下这一点:

a = imread('https://i.stack.imgur.com/WpFAA.jpg');
b = abs(diff(a,1,2));
b = max(b,[],3);
c = imerode(b,strel('rectangle',[200,1]));

enter image description here

答案 1 :(得分:2)

我认为你应该使用二维快速傅立叶变换 如果过滤器可以解决它,首先使用GIMP / Photoshop可能会更容易。

我猜测CC传感器坏了(它看起来很适合旧的扫描仪问题)。在读取相机传感器时可能会出现电气失真。理论上,这种信号具有重复性质。 我不认为这是由错误的colordepth / colorspace翻译引起的

如果您想编码,那么您也可以编写一个基于自定义像素的滤镜,在该滤镜中,您可以将x垂直像素(例如20左右)与下一个20像素的垂直行进行比较。与HSL(L lightnes)比较,而不是RGB。 从所有像素计算亮度以这种方式改变 然后每个像素检查H(heu)在附近像素的范围内取其亮度的斜率平均值(ea取30像素水平,计算前10个像素的平均亮度,最后10个像素将亮度应用于中心像素15,... // 30,15,10尝试找到效果很好的

由于你的整个笔划更明亮/更暗,这样的过滤器会使这种效果平滑,难以保持其他图案(翅膀不那么扭曲),知道传感器有什么颜色空间可能允许更好的决定HSL,也许HSV左右..