Tìm vùng có hình chữ nhật thích hợp trong số các hình chữ nhật có trong ảnh? Xử lý ảnh, opencv?
chào các bạn , mình đang cần giải quyết 1 vấn đề như sau
mình cần tìm ra vùng chứa vân tay trong hình mặt sau của chứng minh thư
như trong hình thì vùng vân tay nằm trong hình chữ nhật bên trái, nhưng trong chứng minh thư thì lại có nhiều hình chữ nhật khác, vậy làm thế nào để tìm ra vùng có vân tay và cắt
1 số ý tưởng như , tìm biên rồi kiểm tra các hình chữ nhật, tính diện tích … hay sao đó, hoặc đo độ dài các cạnh
hoặc là đánh giá sự biến thiên lặp đi lặp lại của các mức xám, nhưng đó là ý tưởng , mình chưa cụ thể được lắm,
mong sự giúp đỡ
xincamon
@Nhu_Nguyen
may you help me?
help help help
Đã nhận dạng được hình CN rồi thì xác định đâu có khó nữa :
chào bạn(anh)
đầu tiên mình cần cắt phần ảnh có vân tay ra
mình định cắt dựa vào biên hình chữ nhật xung quanh vân tay
mình chuyển ảnh màu về ảnh xám, rồi nhị phân hóa , để nói lòi biên lên, vì ảnh cmt độ tương phản gần như chỉ có đen ( mực ) và trắng ( nền giấy)
sau đó tìm biên trên ảnh nhị phân( dễ hơn trên ảnh xám)
rồi tìm các hình chữ nhật và đánh giá hình cần chọn ,rồi lấy tọa độ lưu lại , dùng để cắt ảnh trên ảnh gốc
ý tương như vậy có được k nhỉ
mình đang làm đến bước tìm biên
nhưng tham khảo thư viện thấy 2 kiểu
1 là tìm biên, canny, laplace, gradient
2 là hàm contour tìm viền, k biết biết và viền này khác gì nhau gì?
mình k hiểu hàm contour lắm
và tìm được biên,thì tìm hình chữ nhật ntn, và đánh giá hình cần chọn ntn, mình đang mắc ở chỗ này
mọng trợ giúp
mà mình tự code các hàm xử lý ảnh
mới thử code được hàm tìm ngưỡng tự động
phân ngưỡng
chuyển ảnh xám
chạy thử thì thấy lâu quá
ảnh 2000x3000 pixel
phải mất chạy 5p mới xong
Canny để dò cạnh, mấy cái kia chắc cũng thế nhưng thuật toán khác. Contour chắc là dò đường bao 1 vùng ( chưa dùng đoán thế).
Tìm hình CN nó cũng có hàm dựng sẵn rồi.
Ảnh 2000x3000 mà 5 phút chắc thuật toán có vấn đề ở phần truy cập dữ liệu ảnh.
(Chưa biết bạn dùng ngôn ngữ gì)
minh dung c++
truy cập ảnh màu mình làm như sau
b = (int)anhmau.atcv::Vec3b(i, j)[0];
g = (int)anhmau.atcv::Vec3b(i, j)[1];
r = (int)anhmau.atcv::Vec3b(i, j)[2];
truy cập ảnh xám mình làm như sau
anhxam.at(i, j);
cho mình hỏi thêm, như ảnh cmt trên, thì để tìm ra vùng có vân tay
nên dựa vào biên hay là dựa vào vùng có vân tay, vì khi nhị phân hóa lên, thì vân tay sẽ là vùng đen nhất ảnh
help help diễn đàn mình ít ng theo về xử lý ảnh nhỉ
Bạn truy cập dữ liệu ảnh từng byte qua hàm như thế sẽ rất lâu.
Bạn phải lấy được con trỏ dữ liệu ảnh (là imageData trong MiplImage) rồi thao tác trên con trỏ này thì mới nhanh được.
Dễ thấy vùng vân tay có đặc điểm:
Còn lại thuật toán dựa vào những đặc điểm trên:
Tìm vùng đen nhất,
Tìm vùng nhiều biên nhất.
chuyển ảnh xám, với nhị phân ngưỡng,mình dùng hàm có sẵn trong opencv rồi, hàm có sẵn cũng được code tối ưu hơn
bạn có thể nói rõ về làm ntn đẻ tìm được vùng đen nhất hoặc nhiều biên nhất không
mình chỉ tính được đến đoạn
với tìm vùng đen nhất
thì nhị phân lên,rồi kiêm tra vùng nào có giá trị cao nhất ( nhưng làm thế nào để đánh giá được cả 1 vùng và khoanh vùng) với nhị phân với ngưỡng bn,nhị phân ảnh với ngưỡng cứng hay ngưỡng tự động, vì với ngưỡng cứng thì mỗi ảnh 1 khác, k thể dùng 1 ngưỡng cố định được, còn ngưỡng tự động với hàm có sẵn thì nó ra kết quả k thấy được vùng có tần số cao
với tìm biên nhiều nhất, cũng tương tự,dùng thuật toán tìm biên để lòi biên lên,nhưng làm thế nào để đánh giá được 1 vùng nhiều viên và khoanh vùng lấy tọa độ,
mình mới nhập môn xử lý ảnh còn lơ tơ mơ,
mong trợ giúp
xincamon
mục đích của mình công đoạn này là tìm ra tọa độ và kích thước của vùng có vân tay
và sau đó cắt trên ảnh xám gốc
Hi bạn,
Dạo này bận quá. Về hàm findContours thì bạn đọc cái này nhé.
Tks bạn Mình làm được qua bước đó rồi. Giờ đang đến phần tăng cường ảnh bằng gabor.mà thấy khó hiểu gabor quá
Không rành opencv lắm, chỉ convert gray, threshold cái rồi xem vùng nào lắm màu đen nhất thì chọn
(vùng đen nhất là vùng có cái cumsum bé nhất)
mình làm được bước này rồi
mình nhị phân hóa xong tìm toàn bộ các contour , rồi tìm các contour hình chữ nhật, rồi chọn ra các contour to nhất rồi, đánh giá hình chữ nhật cần lấy,
ý của bạn là
tạo 1 cái mặt nạ
rồi trượt nó trên ảnh
mỗi lần trượt thì tính tổng số mức xám hoặc đếm số mức xám cao hơn ngưỡng nào đó, rồi lưu lại
lấy tọa độ có tổng cao nhât hả?
mình tìm được hình như sau