在Matlab中应用拉普拉斯滤波器

时间:2015-10-23 08:34:33

标签: matlab image-processing filter

我有两个错误

  

非标量运算符

  

未定义的功能'unit8'

以下是代码:

clc 
clear all 
close all 
image=double('img.tif');
filter=[0 -1 0 ; -1 5 -1 ; 0 -1 0];
[rows,cols] = size(image);
outputimage = zeros(rows,cols);
for row = 2:rows-1
    for col = 2:col-1 
        outputimage (row,col)= sum (sum(image(row-1: row+1: col-1: col+1: filter ))); 
    end
end 
%figure,imshow (unit8(image)),title ('Originalimage')
outputimage =unit8(outputimage);
figure,imshow (outputimage, title('Enchanceimage'))

1 个答案:

答案 0 :(得分:2)

解决方案一

有一种方法可以在没有for循环的情况下计算掩码。 这是代码:

clc 
clear all 
close all 
image=imread('img.tif');
filter=[0 -1 0 ; -1 5 -1 ; 0 -1 0];
[rows,cols] = size(image);
outputimage = zeros(rows,cols);
filtered_3x3 = imfilter(image,filter,'replicate');
outputimage = im2uint8(filtered_3x3);
imshow(outputimage);

首先,您应该使用imread功能阅读图像,然后使用imfilter,您可以将蒙版应用于图像。使用im2uint8,您可以将图片转换为uint8。

解决方案二

如果您想更改自己的代码,需要更改某些行。这是代码:

clc 
clear all 
close all 
image=imread('img.tif');
filter=[0 -1 0 ; -1 5 -1 ; 0 -1 0];
rows = size(image,1);
cols = size(image,2);
outputimage = zeros(rows,cols);

for row = 2:rows-1
    for col = 2:cols-1
        for i=1:3
        outputimage (row,col,i)= sum (sum(double(image(row-1: row+1, col-1: col+1 , i)) .* filter )); 
        end
    end
end 
image =uint8(image);
figure,imshow (outputimage)

首先,您应该使用imread阅读图片。 size(image)不会为您提供正确的尺寸,因此请为其指定

rows = size(image,1); cols = size(image,2);。此外,它是col = 2:cols-1而不是col = 2:col-1。循环中存在语法错误。核实。使用for i=1:3,您可以将掩码应用于每个RGB矩阵。最后,uint8函数不是unit8一个!