已阅: 7
目的
原理
- 使用prewitt算子找到图像边缘。
- 设定阈值,并根据阈值将边缘转化成二值数组。
- 将二值数组中值为1的像素以原灰度值显示,值为0的像素灰度值置0显示。
- 注:因为选择的是白纸黑字的图像,所以边缘实际上就是图像前景,即黑字,因此可以省去后续补充边缘等处理。
实验结果
代码
clear all;
ima = imread('2.jpg');
grayIma = rgb2gray(ima);
[height, width] = size(grayIma);
histArray = zeros(1, 256);
prewittOperatorX = ([-1 0 1;-1 0 1;-1 0 1;]);
prewittOperatorY = ([-1 -1 -1; 0 0 0; 1 1 1]);
edgeArray = grayIma .* 0;
%prewitt算子求边缘
for row = 2:height-1
for col = 2:width-1
temp = double(grayIma(row-1:row+1, col-1:col+1));
tempX = prewittOperatorX .* temp;
tempX = abs(sum(tempX(:)));
tempY = prewittOperatorY .* temp;
tempY = abs(sum(tempY(:)));
edgeArray(row, col) = tempX + tempY;
end
end
%设定阈值,并根据阈值将边缘数组中小于阈值的部分,在二值数组中将其置1,其余置0。
thresholdValue = 250;
binaryArray = zeros(height, width);
for row = 2:height-1
for col = 2:width-1
if(edgeArray(row, col) < thresholdValue)
binaryArray(row, col) = 1;
end
end
end
%根据二值数组,将特定部分的像素显示。
resultIma = grayIma;
for row = 1:height
for col = 1:width
resultIma(row, col) = grayIma(row, col) * binaryArray(row, col);
end
end
subplot(1,2,1);
imshow(grayIma);
subplot(1,2,2);
imshow(resultIma);
共有 0 条评论