Làm cách nào để thay đổi công thức phát hiện mã vạch ở mọi góc độ? - MATLAB


14

Làm cách nào để thay đổi công thức phát hiện mã vạch ở mọi góc độ?

Công thức

Ảnh gốc Hình ảnh đã xử lý

 rgb = imread('barcode4.jpg');
% Resize Image
rgb = imresize(rgb,0.33);
figure(),imshow(rgb);
% Convert from RGB to Gray
Igray = double(rgb2gray(rgb));
% Calculate the Gradients
[dIx, dIy] = gradient(Igray);
B = abs(dIx) - abs(dIy);
% Low-Pass Filtering
H = fspecial('gaussian', 20, 10);
C = imfilter(B, H);
C = imclearborder(C);
figure(),imagesc(C);colorbar

Câu trả lời:


8

Nếu bộ lọc bạn hoạt động đủ tốt cho bạn, bạn chỉ cần sử dụng imrotateđể tạo một số phiên bản xoay của hình ảnh nguồn và sử dụng bộ lọc bạn có trên mỗi bộ lọc đó (đảm bảo sử dụng bilinearđể có được các dẫn xuất hợp lý)


Cảm ơn vì lời khuyên. Làm thế nào tôi có thể tạo một số phiên bản xoay? Xin lỗi, tôi mới đến MatLab

Tôi quản lý để có được mã vạch theo chiều dọc hoặc ngang. Tuy nhiên, công thức chỉ có thể phát hiện mã vạch ngang. Tôi có thể thay đổi công thức để cả dọc và ngang có thể phát hiện mã vạch không.
Kim

mathworks.com/matlabcentral/fileexchange/31727-barcode-reader bạn có thể kiểm tra liên kết này
vini

7

Phương trình của bạn làm nổi bật các khu vực nơi độ lớn của độ dốc theo hướng X luôn cao hơn so với hướng Y. Để làm cho công việc này hoạt động theo mọi hướng, thì có lẽ bạn muốn các khu vực có cường độ của độ dốc theo bất kỳ hướng nào cao.

Hãy thử sử dụng như sau:

B = double(sqrt(dIx.^2 + dIy.^2) > 0)

Không phải điều này về cơ bản sẽ làm nổi bật mọi cạnh, nhưng bộ lọc thông thấp sẽ có nghĩa là bạn cần nhiều cạnh gần nhau.


Cảm ơn đã mã hóa! Nhưng tôi không biết đặt mã ở đâu khi tôi thử thay thế công thức, mọi thứ đều chuyển sang màu xanh.

Hãy thử phiên bản cập nhật của tôi.
Nzbuu

Nhưng bây giờ toàn bộ hình ảnh chuyển sang màu đỏ !!
Kim

Tôi quản lý để có được mã vạch theo chiều dọc hoặc ngang. Tuy nhiên, công thức chỉ có thể phát hiện mã vạch ngang. Tôi có thể thay đổi công thức để cả dọc và ngang có thể phát hiện mã vạch không.
Kim

Tôi kiểm tra furmule này '' B = double (sqrt (dIx. ^ 2 + dIy. ^ 2)> 0) "nó không hoạt động.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.