• 大小: 27KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: MATLAB  

资源简介

使用MATLAB语言编写代码对输入的银行卡图片,进行处理分割出银行卡卡号。

资源截图

代码片段和文件信息

%%
clear;
close all;
clc;

%% 自动弹出提示框读取图像
[filename filepath] = uigetfile(‘.jpg‘ ‘输入一个需要识别的图像‘);
file = strcat(filepath filename);
img = imread(file);
figure;
imshow(img);
title(‘银行卡图像‘);

%% 灰度处理
img1 = rgb2gray(img);    % RGB图像转灰度图像


%% 边缘提取
img4 = edge(img1 ‘roberts‘ 0.15 ‘both‘);


%% 图像腐蚀
se=[1;1;1];
img5 = imerode(img4 se);

%% 平滑图像,图像膨胀
se = strel(‘rectangle‘ [30 30]);
img6 = imclose(img5 se);

%% 从图像中删除所有少于500像素8邻接
img7 = bwareaopen(img6 500);


%% 切割出图像
[y x z] = size(img7);
img8 = double(img7);    % 转成双精度浮点型

for i = 1 : x
    for j = 1 : y / 2
        if img8(j i) == 1
            img8(j i) = 0;
        end
    end
end
for i = 1 : x
    for j = 213 : y
        if img8(j i) == 1
            img8(j i) = 0;
        end
    end
end
for i = 450 : x
    for j = 1 : y
        if img8(j i) == 1
            img8(j i) = 0;
        end
    end
end
% imshow(img8)

%找到银行卡卡号区域的位置
%% 切割出图像
[y x z] = size(img8);
img8 = double(img8);    % 转成双精度浮点型

blue_Y = zeros(y 1);
for i = 1:y
    for j = 1:x
        if(img8(i j) == 1) % 判断车牌位置区域
            blue_Y(i 1) = blue_Y(i 1) + 1;    % 像素点统计
        end
    end
end

% 找到Y坐标的最小值
img_Y1 = 1;
while (blue_Y(img_Y1) < 5) && (img_Y1 < y)
    img_Y1 = img_Y1 + 1;
end

% 找到Y坐标的最大值
img_Y2 = y;
while (blue_Y(img_Y2) < 5) && (img_Y2 > img_Y1)
    img_Y2 = img_Y2 - 1;
end

% x方向
blue_X = zeros(1 x);
for j = 1:x
    for i = 1:y
        if(img8(i j) == 1) % 
            blue_X(1 j) = blue_X(1 j) + 1;
        end
    end
end

% 找到x坐标的最小值
img_X1 = 1;
while (blue_X(1 img_X1) < 5) && (img_X1 < x)
    img_X1 = img_X1 + 1;
end

% 找到x坐标的最小值
img_X2 = x;
while (blue_X(1 img_X2) < 5) && (img_X2 > img_X1)
    img_X2 = img_X2 - 1;
end

% 对图像进行裁剪
img9 = img(img_Y1- 3:img_Y2- 6 img_X1-3:img_X2 :);



imwrite(img9 ‘银行卡图像.jpg‘);

%% 对银行卡图像作图像预处理
plate_img = imread(‘银行卡图像.jpg‘);

% 转换成灰度图像
plate_img1 = rgb2gray(plate_img);    % RGB图像转灰度图像


% 直方图均衡化
plate_img2 = histeq(plate_img1);

% 二值化处理
plate_img3 = im2bw(plate_img2 0.76);

% 中值滤波
plate_img4 = medfilt2(plate_img3);

imgRes = zeros(y x);

for i = img_X1 - 3 : img_X2
    for j = img_Y1 - 3 : img_Y2 - 6
        imgRes(j i) = plate_img4(j - img_Y1 + 4 i - img_X1 + 4);
    end
end
imshow(imgRes);


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2586  2018-12-27 16:26  银行卡号识别\main.m

     文件      20061  2018-12-27 11:01  银行卡号识别\微信图片_20181227110015.jpg

     文件       6463  2019-03-30 09:35  银行卡号识别\银行卡图像.jpg

     目录          0  2019-03-30 09:35  银行卡号识别

----------- ---------  ---------- -----  ----

                29110                    4


评论

共有 条评论