使用prewitt算子分割白纸黑字图像(Matlab)

目的

  • 使用prewitt算子分割图像。

原理

  1. 使用prewitt算子找到图像边缘。
  2. 设定阈值,并根据阈值将边缘转化成二值数组。
  3. 将二值数组中值为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);

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注