Matlab: removing the notebook line from Paint

As a child, many of us drew a lot of paint. Our paint notebook ran out of free paper one day, and we drowned inside a simple vertical notebook. During our image processing course, we will use Matlab to remove vertical lines from the piece of a notebook.

For removing vertical lines inside painting paper, I use two methods:

  • The Fourier transform
  • Morphology

I draw my supervisor’s face with a sketch to use as a sample for working on this task.

Farzin Yaghmaee

Farzin Yaghmaee

 

Remove the vertical line inside the painting paper + Fourier transform

Based on the spectrum of the image, the painting lines are located on the vertical line and in the middle. My program blacked out this middle line but left the part of the middle of the spectrum where the rest of the images are intact, as shown above.

clc;

clear all;

close all;

image = imread('paint/paint3.jpg');

image_size = size(image);

temp_image_size = size(image_size);

if(temp_image_size(2) > 2)

image = rgb2gray(image);

end

spec_orig = fft2(double(image));

spec_img = fftshift(spec_orig);

figure;

subplot(2,2,1);

imshow(image);

title('original image');

subplot(2,2,2);

spec_img_temp = log(1 + spec_img);

imshow(spec_img_temp,[]);

title('spectrum original image');

for i = 1 : image_size(1)

if(i > round(image_size(1) / 2 - 15) && i < round(image_size(1) / 2 + 15))

continue;

end

for j = round(image_size(2) / 2 - 2) : round(image_size(2) / 2 + 2)

spec_img(i,j) = 0;

end

end

subplot(2,2,3);

ptnfx = ifft2(ifftshift(spec_img));

imshow(uint8(ptnfx));

title('result image');

spec_orig = fft2(ptnfx);

spec_img = fftshift(spec_orig);

subplot(2,2,4);

spec_img = log(1 + spec_img);

imshow(spec_img,[]);

title('spectrum result image');

 

result:

Remove vertical line inside painting paper + fourier transform

 

Remove the vertical line inside the painting paper + morphology

In the first step, I converted paint images into grayscale colors. I used the Matlab function rgb2gray to do this.

Next, I convert grayscale images to binary images. A binary image has two values: 0 or 1. I use the binarize function in Matlab to convert these values to binary.

Then, I made three linear windows of the following sizes:

  • 3*180
  • 2*90
  • 5*90

The morphology actions I run are as follows:

  • Dilation with a 3*180 linear window.
  • Erosion with a 3*90 linear window.
  • Dilation with a 5*90 linear window.

Manually selecting and testing these windows. I use imerode for erosion and imdilate for dilation.

As a final step, I tested the median and mean filters inside the resulting image. The results were improved by these filters.

For the median and mean filters, I wrote a personal function.

clc;

clear;

close all;

image_raw = imread('paint/paint.jpg');

image_paint = image_raw;

image_size = size(image_paint);

image_x = image_size(1);

image_y = image_size(2);

size_check = size(image_size);

if(size_check(1, 2) > 2)

image_paint = rgb2gray(image_paint);

end

image_bin = imbinarize(image_paint, 'adaptive', 'ForegroundPolarity', 'dark', 'Sensitivity', 0.5);

SE1 = strel('line',6, 180);

SE2 = strel('line',2, 90);

SE3 = strel('line',7, 90);

image_erode = imerode(image_bin, SE2);

image_dilate = imdilate(image_erode, SE1);

image_dilate = imdilate(image_dilate, SE3);

median_result = median(image_dilate, image_x, image_y);

mean_result = mean(image_dilate, image_x, image_y);

figure;

subplot(1,2,1), imshow(image_raw);

title('image raw');

subplot(1,2,2), imshow(image_dilate);

title('image result');

 

result:

Remove vertical line inside painting paper + morphology