0
我正在做某種光學字符識別並面臨以下問題。我將字形存儲在二進制矩陣列表中,它們可以具有不同的大小,但它們的最大可能寬度是wid = 3
列(可以是任何定義的常數,而不僅是3)。在處理的第一階段後,某些情況下,我得到它看起來像這樣的數據:拆分列表元素擴大列表
myll <- list(matrix(c(0, 0, 0, 1, 1, 0), ncol = 2),
matrix(c(0), ncol = 1),
matrix(c(1, 1, 0), ncol = 3),
matrix(c(1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1), ncol = 7),
matrix(c(1, 1, 1, 1), ncol = 2))
# [[1]]
# [,1] [,2]
# [1,] 0 1
# [2,] 0 1
# [3,] 0 0
#
# [[2]]
# [,1]
# [1,] 0
#
# [[3]]
# [,1] [,2] [,3]
# [1,] 1 1 0
#
# [[4]]
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
# [1,] 1 1 1 0 0 0 1
# [2,] 0 1 0 1 0 0 1
# [3,] 1 1 1 1 0 0 1
#
# [[5]]
# [,1] [,2]
# [1,] 1 1
# [2,] 1 1
所以,有些字形可能會因爲某些原因分開。這隻發生在最大寬度的字形上。而且,矩陣的末尾可能會有一些垃圾。我必須將它們分割成寬度爲ncol = wid
的矩陣,保留最後一塊(垃圾)。然後我保存這個矩陣列表中的獨立元素,得到下面的輸出:
# [[1]]
# [,1] [,2]
# [1,] 0 1
# [2,] 0 1
# [3,] 0 0
#
# [[2]]
# [,1]
# [1,] 0
#
# [[3]]
# [,1] [,2] [,3]
# [1,] 1 1 0
#
# [[4]]
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 0 1 0
# [3,] 1 1 1
#
# [[5]]
# [,1] [,2] [,3]
# [1,] 0 0 0
# [2,] 1 0 0
# [3,] 1 0 0
#
# [[6]]
# [,1]
# [1,] 1
# [2,] 1
# [3,] 1
#
# [[7]]
# [,1] [,2]
# [1,] 1 1
# [2,] 1 1
此刻,我可以用這個幫助,使其功能
checkGlyphs <- function(gl_m, wid = 3) {
if (ncol(gl_m) > wid)
return(list(gl_m[,1:wid], matrix(gl_m[,-(1:wid)], nrow = nrow(gl_m)))) else
return(gl_m)
}
separateGlyphs <- function(myll, wid = 3) {
require("magrittr")
presplit <- lapply(myll, checkGlyphs, wid)
total_new_length <-
presplit[unlist(lapply(presplit, is.list))] %>% lapply(length) %>% unlist() %>% sum() +
as.integer(!unlist(lapply(presplit, is.list))) %>% sum()
splitted <- vector("list", length = total_new_length)
spl_index <- 1
for (i in 1:length(presplit))
{
if (!is.list(presplit[[i]]))
{
splitted[[spl_index]] <- presplit[[i]]
spl_index <- spl_index + 1
} else
{
for (j in 1:length(presplit[[i]]))
{
splitted[[spl_index]] <- presplit[[i]][[j]]
spl_index <- spl_index + 1
}
}
}
if (any(lapply(splitted, ncol) > wid)) return(separateGlyphs(splitted, wid)) else
return(splitted)
}
但我相信有更多的快和方便的方式來實現相同的結果(不使用for
循環和這種enlooped重新分配的元素,然後遞歸如果需要O_o)。
我會心存感激的點什麼建議,或者在final
推薦一些OCR-包河
是的,但是......它合併在一個所有矩陣,然後再通過分割固定寬度他們,但真正在我的名單,我可以有不同的列數的矩陣...我寫的他們都是同樣的,但它的錯誤,我只是想簡化這種情況。問題是我不需要觸摸好矩陣(照原樣複製),只能使用太寬的矩陣。我會編輯我的問題。 – inscaven
請提及用於確定矩陣是否「太寬」(我的推定是> 2)的標準,並確認處理是否按照您在帖子中提到的「按照固定寬度分割」。 – Ricky