删除图像下的阴影

时间:2015-02-04 14:37:15

标签: matlab

我使用以下代码获取图像的边框,并删除图像下的阴影。图像是灰度图像。 代码是:

x = imread('image.jpg');
sobel_h = [-1 0 1;-2 0 2;-1 0 1];
sobel_v = [-1 0 1;-2 0 2;-1 0 1]';
x_sobel_h = conv2(x,sobel_h,'same');
x_sobel_v = conv2(x,sobel_v,'same');
x_sobel_c = sqrt((x_sobel_h).^2+(x_sobel_v).^2);
x_sobel_c=uint8(x_sobel_c);
figure,imshow(x_sobel_c);
z=x_sobel_c;
z(z~=0 & z<=150)=0;
z(z>0)=255;
figure,imshow(z);

我在Matlab文件交换中找到了这个代码。它很简单,适用于某些图像,但阴影仍保留在某些图像中。

如果我将z<=150更改为更高的值,可以删除阴影。但是根据图像,需要更改此值。是否有人知道其他阈值方法来删除不同图像中的阴影?如果有人能指出我的任何参考资料,我将不胜感激。谢谢你

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,删除阴影没有灵丹妙药。

您可能最接近的是使用动态方法来确定每个图像的最佳阈值。例如,Otsu的方法在MATLAB中通过命令graythreshmultithresh实现(前者定义了一个阈值,用于将图像划分为2个类,后者允许您指定阈值的数量)。