[speed limit sign recognition] speed limit sign recognition based on matlab GUI morphology [including Matlab source code phase 1142]

1, Introduction
Mathematical morphology operations can be divided into binary morphology and gray morphology. Gray morphology is extended from binary morphology. Mathematical morphology has two basic operations, namely corrosion and expansion, and corrosion and expansion form open operation and closed operation through combination.
The open operation is to corrode and then expand, and the closed operation is to expand and then corrode.

1 binary morphology
Roughly speaking, corrosion can "reduce" the range of the target area, which essentially shrinks the boundary of the image and can be used to eliminate small and meaningless targets. The formula is expressed as:

This formula indicates that structure B is used to corrode A. it should be noted that an origin needs to be defined in B, [and the moving process of B is consistent with the moving process of convolution kernel, which is the same as the calculation after the convolution kernel overlaps with the image] when the origin of B is translated to the pixel (x,y) of image a, if B is at (x,y), it is completely included in the overlapping area of image a, (that is, all the image values of a corresponding to the element position of 1 in B are also 1) assign the pixel (x,y) corresponding to the output image to 1, otherwise assign it to 0.
Let's look at a demo.

B moves on A in order (the same as the convolution kernel moves on the image, and then performs morphological operation on the coverage area of B). When the area covering A is [1,1; 1,1] or [1,0; 1,1] (that is, '1' in B is A subset of the coverage area), the position of the corresponding output image will be 1.

2 expansion
Roughly speaking, the expansion will "enlarge" the range of the target area, merge the background points in contact with the target area into the target object, and expand the target boundary to the outside. It can be used to fill some holes in the target area and eliminate the small particle noise contained in the target area.

This formula represents expanding A with structure B and translating the origin of structure element B to the position of image pixel (x,y). If the intersection of B and A at the image pixel (x,y) is not empty (that is, at least one image value corresponding to A at the element position of 1 in B is 1), the pixel (x,y) corresponding to the output image is assigned as 1, otherwise it is assigned as 0.
The illustration is:

3 Summary
In other words, regardless of corrosion or expansion, the structural element B is translated on the image like a convolution operation. The origin in the structural element B is equivalent to the core center of the convolution core, and the result is also stored on the element corresponding to the core center. However, corrosion is that B is completely contained in the area covered by it, and B can intersect with the area covered by it during expansion.

4 gray morphology
Before describing the gray value morphology, we make A convention that the area of image A covered by structural element B is marked as P (meaning Part).

5 corrosion of gray morphology
Then, corrosion in gray morphology is an operation similar to convolution. Use P to subtract the small rectangle formed by structural element B, and take the minimum value to assign it to the position of the corresponding origin.
Let's take a look at an example to deepen our understanding of gray morphology.
Suppose we have the following image A and structural element B:

The process of gray morphology corrosion is as follows:

We show the output result of the first element of the output image, that is, the position of 4 corresponding to the origin. The values of other elements of the output image are also obtained in this way. We will see that the area covered by B is the subtracted matrix, and then find min (minimum value) in its difference matrix as the value of the corresponding position of the origin.

Expansion of gray morphology
According to the above description of corrosion, we make the same description of expansion. Expansion in gray morphology is an operation similar to convolution. Add P and B, and then assign the maximum value in this region to the position corresponding to the origin of structural element B.


Here is also a description of the origin of the first element value of the output image.

The maximum value of the sum of the above matrix is 6, so 6 is assigned to the position corresponding to the origin of the structural element.

6 Summary
The concept of gray morphology is introduced above. Here we will talk about their respective uses. Compared with the original image, each pixel becomes smaller as a result of corrosion, so it is suitable for removing peak noise. The result of gray value expansion will make each pixel larger than before, so it is suitable for removing Valley noise.
2, Source code

function varargout = Mat5_2(varargin)
% MAT5_2 MATLAB code for Mat5_2.fig
%      MAT5_2, by itself, creates a new MAT5_2 or raises the existing
%      singleton*.
%
%      H = MAT5_2 returns the handle to a new MAT5_2 or the handle to
%      the existing singleton*.
%
%      MAT5_2('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAT5_2.M with the given input arguments.
%
%      MAT5_2('Property','Value',...) creates a new MAT5_2 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Mat5_2_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Mat5_2_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Mat5_2

% Last Modified by GUIDE v2.5 21-Jul-2021 15:09:04

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Mat5_2_OpeningFcn, ...
                   'gui_OutputFcn',  @Mat5_2_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Mat5_2 is made visible.
function Mat5_2_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Mat5_2 (see VARARGIN)

% Choose default command line output for Mat5_2
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Mat5_2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Mat5_2_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)%Load Image 
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global Image
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'.gif'},'Select Picture');
str=[pathname filename];
Image1 = imread(str);
Image=Image1;
axes(handles.axes1);
imshow(Image1);




function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end
function BW = imbinarize(I,varargin) %#codegen
%imbinarize Binarize image by thresholding.

%   Copyright 2015-2018 The MathWorks, Inc.

%   Syntax
%   ------
%
%       BW = imbinarize(I)
%       BW = imbinarize(I,method)
%       BW = imbinarize(I,'adaptive',Param,Value,...)
%       BW = imbinarize(I,t)
%
%   Input Specs
%   -----------
%
%      I:
%        real
%        non-sparse
%        2d
%        uint8, uint16, uint32, int8, int16, int32, single or double
%
%      method:
%        string with value: 'global' or 'adaptive'
%        default: 'global'
%
%      Sensitivity:
%        numeric
%        real
%        non-sparse
%        scalar
%        non-negative
%        <= 1
%        default: 0.5
%        converted to double
%
%      ForegroundPolarity:
%        string with value either 'bright' or 'dark'
%        default: 'bright'
%
%      t:
%        numeric
%        real
%        non-sparse
%        2d
%        either scalar or matrix of the same size as I
%
%   Output Specs
%   ------------
%
%     BW:
%       logical
%       2D matrix
%       same size as I
%

% Validate the input image
validateImage(I);

% Parse and validate optional inputs
[isNumericThreshold,options] = parseOptionalInputs(I,varargin{:});
coder.internal.prefer_const(isNumericThreshold,options);

if isNumericThreshold
    % BW = imbinarize(I,t)
    BW = binarize(I,options.t);
else
    if strcmp(options.method,'global')
        % BW = imbinarize(I,'global')
        t = computeGlobalThreshold(I);
    else
        % BW = imbinarize(I,'adaptive',...)
        t = adaptthresh(I,options.sensitivity,'ForegroundPolarity',options.polarity);
    end
    BW = binarize(I,t);
end

3, Operation results

4, Remarks
Version: 2014a

Keywords: MATLAB image processing

Added by horsefaceba on Sun, 16 Jan 2022 03:52:19 +0200