#math #image-processing #opencv #statistics
#математика #обработка изображений #opencv #Статистика
Вопрос:
Я пытаюсь сравнить текстовые и нетекстовые области на основе толщины линий / штрихов. Используя преобразование расстояния и немного повозившись после этого, удалось получить толщину (фактически половину толщины) каждого штриха, содержащего элементы изображения.
Вот типичный результат запуска программы:
1. Область текста
34444433343554335533553555545544455445533444444344455435553335545556665444445654444444444444444444444444455434554554455444456544444445555445555543355556665544665444535444553354434553444444444444455444445544444454444444444444444444444444455442444444554444444544444444444444554444456444554414454444444444444444444554444445543454445443444544434443344443334442133223332221
- Нетекстовый
1111112222212222222213333232111112234444411415445125544126143211123445716422457887433442222991443110103332222113111163124134444312122222222224551313122222222222243455553141432222222232111422222351515513211134161412234411743111111454181813111434555191113145520111322223334554452121204233145433467891011121311732525252524202022213137326252419192112222222335831818204233332222344315625171714334444451111788992225161619334538215151811341234258811414113111223144488242413131711332543444872416135247724113223544356152554433333332666652323151444444336675523151344443335566523881333444552222113344445514141433345555202120141114444444345201433355644454191313322333474351818134322266657342171266672415161131145657419111421316665581447891113151513135555555586745556555588551214145145335557888755141314774333455886555141011111211981417776348524111099814144444556414341181114135447434567845534444334881088891011111213141113477734444379888881414144477437254448998834733764226777753781313577776677654466665753466712124666645444551124476735456655444432446663254664411476757773464147322222777455332224237738833223378121242311333378583438869913135923222344338101013139943333115533910111111884112155339910101011111111101111111097777778855544553991010111111111111111110999999101111111110777764111113561091097543434552999989998666544436554888778755554455541444465554317777774555555544455556665555564424443356433222345222124422341111312111214411322222223222231221143334424322342222123536411441664431775446548856766655885555664444644665449876444477544227887772
Итак, существует ли какой-либо статистический показатель, более сложный, чем стандартное отклонение, который укажет на разницу в двух наборах данных: один изменяется постепенно, в то время как второй имеет резкие отклонения? (включены пугающие цифры, чтобы проиллюстрировать, что я пытаюсь квантовать!)
Также, пожалуйста, обратите внимание, что количество точек данных не будет одинаковым, поскольку я буду сравнивать разные регионы с некоторым экспериментально определенным порогом SD (или какой-либо другой мерой), а не регионы между собой.
Комментарии:
1. Разделены ли ваши области текстовым или нетекстовым содержимым, или у вас есть единый список толщин, из которого вы хотите извлечь текстовые и нетекстовые области?
2. отдельные области, найденные с помощью анализа подключенных компонентов, с классификацией как текстовые / нетекстовые на основе результата статистической оценки.
Ответ №1:
Если вас интересует измерение плавности, стандартное отклонение различий между соседними толщинами должно быть намного меньше для текста, чем для нетекстовых данных.
Таким образом, вы можете просто преобразовать
34444433343554335533553555545544455445533444444344455435553335545556665444445654444444444444444444444444455434554554455444456544444445555445555543355556665544665444535444553354434553444444444444455444445544444454444444444444444444444444455442444444554444444544444444444444554444456444554414454444444444444444444554444445543454445443444544434443344443334442133223332221
в
1000(-1)000…
(1 = 4-3, 0 = 4-4 и т.д.). Стандартное отклонение этого списка различий невелико для текстовых областей (в вашем примере этот список содержит много нулей).
Если вам нужно продолжать использовать числа от 0 до 9 для обозначения разницы в толщине между t1
и thickness t2
, вы можете выполнить изменение масштаба: round((t2-t1 9)/2)
.
Комментарии:
1. большое спасибо. попробуем все предложения, а затем решим, какое из них работает лучше всего, хотя это выглядит намного проще.
Ответ №2:
Мысль, которая приходит мне в голову, заключается в том, что вы могли бы выполнить вейвлет-преобразование для фрагмента, а затем посмотреть на среднюю энергию, связанную с высокочастотными вейвлетами.
Если вы не знакомы с вейвлетами, проще всего описать вейвлет Хаара. Предполагая, что количество выбранных вами точек равно 2n, вы можете рассчитать это следующим образом:
- Разделите ваши данные на пары точек.
- Возьмите 1/2 разницы. Это коэффициент детализированного вейвлета.
- Возьмите среднее значение для каждой пары. Это дает вам 2n-1 балла. Рекурсивно выполните вейвлет-преобразование для них.
Для каждого уровня вейвлета Хаара возьмите среднее значение квадрата коэффициента. Если ваши данные действительно выглядят так, как вы описали, эта статистика для первых нескольких уровней будет сильно отличаться. Поэкспериментируйте, определите, где находится ваш порог, и вы, вероятно, получите довольно надежный тест. (Я бы рекомендовал иметь 3 возможных ответа из вашего теста: «Текст», «Не текст», «неясно». Посмотрите на «неясные» примеры, а затем улучшите свой тест.)
Комментарии:
1. Я читаю о вейвлетах Хаара. Попробуем этот метод наряду с другими предложенными и посмотрим, какой из них дает наиболее подходящие результаты.
2. не могли бы вы, пожалуйста, объяснить, что подразумевается под «уровнем» вейвлета Хаара. Это значения, которые я получаю после шага 3. перед следующим рекурсивным запуском по точкам? Также большинство ресурсов в Интернете разделяют точки данных на sqrt (2), а не на 2 — будет ли это как-то отличаться в этой реализации?
3. @AruniRC: Учитывая, что я отталкиваюсь от воспоминаний о том, что я в последний раз видел в середине 90-х, не стесняйтесь использовать «большинство ресурсов в Интернете». Хотя это будет полезно для вас в любом случае. Что касается уровня, результаты вашего первого прохождения через 2 * * n точек — это первый уровень детализации. Результаты второго прохода по 2 ** (n-1) усредненным точкам — это второй уровень детализации. И так далее.