图像浮雕效果的实现

这是来自网上的一段matlab的实现:

img=imread('9.jpg'); 

size_info=size(img); 

height=size_info(1);

width=size_info(2); 

spec_img=zeros(height,width,3); 

for i=2:height-1 

    for j=2:width-1 

        spec_img(i,j,:)=double(img(i-1,j-1,:))-double(img(i+1,j+1,:))+128;

    end 

end 

imshow(spec_img/255); 

以上代码产生浮雕的效果,它使用图像的左上像素减去右下像素,再加上128;若要产生雕刻的效果,可使用以下代码:
spec1_img=zeros(height,width,3); 
for i=2:height-1
    for j=2:width-1
        spec1_img(i,j,:)=double(img(i+1,j+1,:))-double(img(i-1,j-1,:))+128; 
    end
end
imshow(spec1_img/255);
以Tulips.jpg为例,三幅图对比如下:

图像浮雕效果的实现
图像浮雕效果的实现
图像浮雕效果的实现
可以看出效果是达到了。
最后需要说明的是imshow函数里的那个除以255是干啥的,实际上是把RGB分量数值归一化到0-1的范围,由于已经是double型的了,所以imshow知道把图像如何显示出来。
如果用C语言实现以上算法,万万不可去除以255,否则显示出来的图像是漆黑一片,而应该将RGB分量数值clip到0-255之间。