Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8   вперед  Ctrl      все
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
mayton
по всем направлениям
это ключевое слово, откуда синусы? прямая определена 2-мя тт. Навскидку и получается, что для каждого танкенса своё пересечение с осью У - условно говоря (надёжнее в полярных координатах). Ну и будет какая-то непрерывная кривулька\прямулька + ещё для пучка, что через точку проходит: вартикальная прямая (ну, или горизонтальная). Это и будут ровные по высоте хребты, остальное 0. Вроде так.
31 янв 19, 20:00    [21799147]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Хорошо. К чорту тангенсы.

Занимаясь этой бедой я неизбежно думаю о предварительной оптимизации.
И возможно это меня тормозит. Писать же концептуальный код который будет
работать сутки - как-то неинтересно.

Значит так. Ищем непустые пикселы. Допустим это будут тексты и картинки нашего факса.

Картинка с другого сайта.

Для каждого пиксела рисуется семейство прямых которые проходят через него
под разными углами (допустим с шагом в 1 градус). Для каждой прямой оценивается
влияние соседних пикселов. Влияние фиксируется как синусоида на поверхности Хафа (справа).
Поверхность - вещественная. Все синусоиды образуют суперпозицию (характерный полутональный рисунок).
Для простоты можно считать что величина 1.0 это минимальный дискретный уровень синусоиды.
Характеристики синусоиды соответсвтуют прямой в полярных координатах где (Ро и Тета) расстояние
от центра коодинат до прямой и угол наклона относительно оси Х).

Вопросы. Имеет-ли смысл ограничить наш текст некоторый выпуклой областью (типа многоунольника
чтобы исключить лишние вычисления).

Имеет ли смысл дважды учитывать влияния одного пиксела на другой когда прямая проходит через них.
Мы фактически дважды посчитаем их. Или трижды для трех.
1 фев 19, 14:28    [21799722]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224


К сообщению приложен файл. Размер - 61Kb
1 фев 19, 14:33    [21799738]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
Так бы сразу и сказал (С)
А то вопрос про одну точку, а ответ нужен про все вместе.

Насчёт дублирования всего. Имею только ИМХО.
Украшательство это. Не надо только секущие крутить на все 365 град. А если пучок переносишь в другую точку, то там эта парная находится в другом окружении, и там её доля другая, так что считать придётся повторно. Не запоминать же статистику для уже проведённой однажды прямой.
И оболочка тоже украшательство, если очень хочется программировать. Хорошо, если она отсечёт черные поля.
1 фев 19, 20:31    [21800139]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
exp98
Так бы сразу и сказал (С)
А то вопрос про одну точку, а ответ нужен про все вместе.

Нужен тест. Когда я напишу фунцию для расчета Хафа для одной точки мне будет интересно
правильно я написал или нет. Вы - можете придумать утверждение для данного теста?
2 фев 19, 00:57    [21800257]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
exp98

Украшательство это. Не надо только секущие крутить на все 365 град.

Эта фраза меня запутывает. Она либо составлена впопыхах либо вы другое хотели сказать. Вобщем непонятно.
2 фев 19, 00:58    [21800258]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
exp98
И оболочка тоже украшательство, если очень хочется программировать. Хорошо, если она отсечёт черные поля.

Нифига себе украшательство!

Это на минуточку - половина площади всего листа. Я напомню что там идет учёт пикселов. И если его
удастся сократить на 50% - это уже блин оптимизация. А прямые тогда заменяются на лучи или отрезки
с более короткой длиной. Не доходя до границ листа.
2 фев 19, 01:00    [21800260]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
mayton
Вы - можете придумать утверждение для данного теста?
Если бы делал я, то безусловно проверял бы специальные случаи, прежде, чем сказать, что в первая версия готова, и теперь предстоит более длительный период проверки на разнообразных материалах (по сути приёмка заказчиком).
Однако на данный момент мы можем под этим алгоритмом подразумевать различающиеся процедуры.

Да, я действительно предыдущее писал не то чтобы впопыхых, а просто не особенно обязываясь. И даже вспоминаю, что кое что неверно.
В случае полярных координат 365 град не будет, при 0 в углу поля. В случае тангенсов могло бы быть.
Сначала я подразумевал послед-сть действий типа: в каждой точке проводим пучок. Но сейчас кажется, чо может быть и лучше, если внешним циклом сделать направления и каждое из них ссуммировать внутренним циклом по по всей площади. Тогда в одном направлении любая точка участвует не более 1 раза теоретически.

Но остаюсь при мнении, что я бы сначала сделал для всего листа (и тщательно проверил бы), после чего уже можно оптимизировать.
2 фев 19, 22:35    [21800581]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
Я даже скажу, что сам бы сначала сделал на языке как можно более высокого уровня, где бы большинство нюансов обсудил с заказчиком. Потом уже остальное всё. Жаль, что питон не знаю.

Здесь же прикладываю просто рекламные картинки. Вдумываться в них не надо !! Просто хотел понять, сгодится ли для модели. Один рис. фрагмент факса и выделенные формулами 3 напрвления ~86, 60, 45 град без всякого Брэзенхэма или как его звать.
На др-м рис. тоже формулами в пространстве тангенсов вычислял позицию, через к-рую пройдёт эта прямая в исходном пр-ве. Случилась неожиданная красота, решил поделиться.
На самомделе здесь только некий нелинейный срез этих позиций. Думать запрещено!

Но в эксе-2003 колонок 255, даже при транспонировании входит только 255 строк факса.
В 2007-15 их уже много тысяч, но я им дома не пользуюсь. Так что это тупиковый для моделирования метод

К сообщению приложен файл. Размер - 4Kb
2 фев 19, 23:11    [21800590]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
"красота"

К сообщению приложен файл. Размер - 27Kb
2 фев 19, 23:12    [21800591]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Я даже скажу, что сам бы сначала сделал на языке как можно более высокого уровня, где бы большинство нюансов обсудил с заказчиком.

(пожимая плечами)

Нет заказчика. Ну или я сам себе заказчик.
2 фев 19, 23:33    [21800604]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
exp98
Здесь же прикладываю просто рекламные картинки. Вдумываться в них не надо !! Просто хотел понять, сгодится ли для модели. Один рис. фрагмент факса и выделенные формулами 3 напрвления ~86, 60, 45 град без всякого Брэзенхэма или как его звать.
На др-м рис. тоже формулами в пространстве тангенсов вычислял позицию, через к-рую пройдёт эта прямая в исходном пр-ве. Случилась неожиданная красота, решил поделиться.
На самомделе здесь только некий нелинейный срез этих позиций. Думать запрещено!

Вы могли-бы перенести это в JavaScript? Шаблон я вам подскажу. Там надо будет просто вписать вашу тригонометрию
в процедуры которые я определю. И добавлю "TODO:".
2 фев 19, 23:51    [21800613]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Хм... все оптимизации JavaScript ведут к webassembly. Интересная шняга. Надо-бы поднять отдельно
обсуждение.
3 фев 19, 20:21    [21800895]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
Про заказчика я условно = степень завершённости.
mayton
Вы могли-бы перенести это в JavaScript?
Э-ээ, дело в том, что в эксе формулы хороши тем, чтобы не прогать. Взамен приходится многие вещи делать руками и повторно.

Из формул здесь единственная типа y=kx+b, перебор k и b (или через полярные корд-ты). Что тут переносить? А вот манипуляции ручками как раз и надо прогать.

Нужна загрузка картинки на канву и в массив.
Работа с канвой - в JSе канву никогда не прогал.
Определить диапазон для исходных переменных,
для целевых переменных
Ну т.е. задать преобразование.
В циклах по направлениям и точках провести суммирование (либо процентовку).
Добавить процедурку - показометр второго рисунка в целевом пр-ве.
Поотладить это всё.

Пустяк для JSсчика. Но это реально затрачиваемое время. Мне это не один час. Боюсь обещать.

А главное в конце ещё и поискать надо ту самую хребтину, к-рая должна индицировать направление. А их как минимум 2: вертикальная и гориз-ная. К тому же в индицирующем пространстве мы не имеем геометрических координат исходного пр-ва, а лишь направления.
И м.б. вместо рисования прямых каждый раз поворачивать картинку, а тогда нужно заранее расширить размеры поля.
3 фев 19, 21:37    [21800915]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Я не JS-ник. Но я написал заготовочку. Которая позволит хотя-бы как-то на едином языке что-то разработать.

Вот. Прикладываю. Там в секции TODO: надо подставить картинку которую надо обработать.

+
<!DOCTYPE html>
<meta charset="UTF-8">

<head>
   <style>
    body {
      background-color: gray;
    }
	#main{
	  position:absolute;
	  width:1024px;
	  height:512px;
	}
	#main > div {
	  float:right;
	}
	#d1{
	  width:512px;
	  height:512px;
	}
	#d2{
	  width:512px;
	  height:512px;
	}
   </style>
</head>

<HTML> 

<script type="text/javascript">
	"use strict";

	// 2-Feb-2019 : mayton : "Initial commit"

	function getR(canvas, pix, x, y) {	
		return pix[x * 4 + y * canvas.width * 4];
	}

	function getG(canvas, pix, x, y) {
		return pix[x * 4 + y * canvas.width * 4 + 1];
	}

	function getB(canvas, pix, x, y) {
		return pix[x * 4 + y * canvas.width * 4 + 2];
	}

	function filterHighFrequency(canvas, pix, x, y) {

		var m =    [[ -1, -1, -1 ], 
		            [ -1,  9, -1 ], 
		            [ -1, -1, -1 ]];		

		var r = 0;
		var g = 0;
		var b = 0;
		for(var yy = 0; yy < 3 ; yy++) {
			for(var xx = 0 ; xx < 3 ; xx++) {				
				var tm = m[xx][yy];				
				r += (getR(canvas, pix, x + xx - 1, y + yy - 1) * tm);
				g += (getG(canvas, pix, x + xx - 1, y + yy - 1) * tm);
				b += (getB(canvas, pix, x + xx - 1, y + yy - 1) * tm);
			}
		}
		return col(r,g,b);
	} 

	function getPixelOffset(canvas, x, y) {
		return x * 4 + y * canvas.width;
	}
	
	function col(r, g, b) {
		return "rgb(" + r + "," + g + "," + b + ")";
	}

	// mayton:> converts from (r,g,b) to grayscale value normalized to 0..1
	function brighness(r, g, b) {
		return r * 0.299 + g * 0.587 + b * 0.114;
	}

	window.onload = function() {
		console.log("01::onload");
    	
		var WIDTH = 512;
		var HEIGHT = 512;

    	var source = document.getElementById("source");
    	var sourceCtx = source.getContext("2d");   

    	var image1 = new Image();
    	// TODO: Replace with correct image
	    image1.src = "remastered-lena-512x512.png"; //"b_img7.jpg"; //"faxBW2-15grad-small.png"; 	

    	image1.onload = function() {
    		console.log("02::image loaded");
    		sourceCtx.drawImage(image1, 0,0);    		
	    	var dest = document.getElementById("dest");
	    	var destCtx = dest.getContext("2d");

	    	console.log("03::getting source image data");

	    	var sourceImageData = sourceCtx.getImageData(0, 0, source.width, source.height);
			var pix = sourceImageData.data;
	    	var i = 0;

	    	console.log("04::start image processing");
	    	var rmax = 0;
	    	var avgBr = 0.0;
	    	for(var y = 1; y < 512 - 1; y++) {
	    		for(var x = 1; x < 512 - 1; x++ ) {
	    			//------------------------- TODO: Implement here...	    			
	    			destCtx.fillStyle = filterHighFrequency(source, pix, x, y);
	    			destCtx.fillRect(x, y, 1, 1);
	    			//-------------------------------------------	    			
	    		}
	    	};   

	    	console.info(" average mean = " + avgBr / WIDTH / HEIGHT / 255.0); 	

	    	console.log("05::finished")
    	}
    	
    	
	};
</script>

<BODY background = "gray">
	<div id="main">		
		<div id="d1"><canvas id = "dest" width="512" height="512"/></div>
		<div id="d2"><canvas id = "source" width="512" height="512"/></div> 
	</div>
</BODY>

</HTML>


Принцип такой. Слева - источник. Справа - получатель. Получатель имеет вольную семантику. Это не обязательно
картинка. Это может быть как раз пространство Хафа. Где более яркому цвету соотв. более выская величина Z
на поверхности X,Y.
3 фев 19, 21:43    [21800917]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Картинка с печально известной мадам Леной. У меня в браузере выглядит как-то так.
В качестве tech demo я добавил фильтр высоких частот. Но его надо выкинуть и заменить на то
что надо нам по смыслу.

К сообщению приложен файл. Размер - 144Kb
3 фев 19, 21:56    [21800921]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
exp98
А главное в конце ещё и поискать надо ту самую хребтину, к-рая должна индицировать направление. А их как минимум 2: вертикальная и гориз-ная. К тому же в индицирующем пространстве мы не имеем геометрических координат исходного пр-ва, а лишь направления.
И м.б. вместо рисования прямых каждый раз поворачивать картинку, а тогда нужно заранее расширить размеры поля.

Давайте предположим что мы сканируем журнал пчеловодов.
Есть пол-листа - плоский текст. А на другой половине - картинка
с пчелиными сотами. Снятая в высоком контрасте.

Предполагаю что на плоскости Хафа мы детектируем углы в 0 и 90 градусов.
(это - направления текста) Тут как-бы все ОК. И еще странные локальные всплески
по углам 60 градусов. Минус 60. Это направления линий пчелиных сот.
Чисто технически нам стоит задача - понять где правильные локальные максимумы.
И где - фейковые образованные иллюстрацией.
3 фев 19, 22:01    [21800922]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
Ловко сделано, практически всё готово.

Загвоздка в том, что только по Хафу не получится и не могло.
В сотовой конкретике, хребты пересекаются под 60 гр, а текстовые под 90.
Но с шашечным журнал фокус не пройдёт.
И заранее пока неизвестно, чей хребет будет выше: графический или текстовый. Готов повторить: размываем текст, чтобы получить полосы посплошнее.

Я не искал, как это давно решили у Арлазарова и Яна, или как это делают в дискретке.
В "КБ и НИИ" подобное традиционно делали через изучение 2-мерного корреляционного поля амплитуд. Разное там, кластеры, периоды, частотные спектры ... нужно же отличить в окуляре танк от избушки, БР от восхода Луны, свою БР от НЛО, подводку от косяка рыб ...

Предположим, что периодичность как-то выяснили методом автокоррел-ной функции. Отличать шашечки от текстовой периодичности можно пытаться по соотношению и по абсолютным размерам вертикальной и горизонтальной периодичности.

Как и для избушки, нужна типовая статистика. Других дум пока не имею.
Только хочу ещё сказать, что не верю в метод сжатия путём распознавания текста, уж лучше жипег. С текстом неизбежны искажения и ложные сработки. В этой же теме я приводил примеры сишного распознавания - слёзы, правда с опцией 2-язычности в комментариях проги.
3 фев 19, 23:08    [21800946]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Смотрите. Чтобы у нас не вышло диалога каждый о своём. Я предложил тему. Вы можете
не соглашаться с методикой. И высказывать ваши прогнозы.

Но я ожидаю предложений. Потому что на 1 оптимиста всегда найдется 10 000 пессимистов.

Ваше сишное распознавание я не понял по юзкейсу. Тоесть как его использовать? И где его
полезный эффект. Как его "пощупать" за вымя?
3 фев 19, 23:32    [21800954]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
mayton, забудьте уже о тех файлах. Я сейчас написал о том, насколько плохо распознался скан на сервере ФР для халявных распознаваний. Можно сказать совсем не. Необходимо понимать, что мой оптимизм либо пессимизм непосредственно мотивирует меня. Заклинания здесь не помогут.

Можно остановиться на вопросе, как отсеять ложные "прямые". Не могу уверенно сказать, что по анализу признакового пр-ва это выяснится однозначно. Похоже, что надо получить и посмотреть 4 результата, как группируются яркие точки.
Сотовый случай как средней паршивости,
шашечный - как худший.
Раздельно, если клетки у них плоские, с малой долей полутонов, и когда не плоские.

Насчёт проги. В инете выложены тексты этого суммирования из матлаба. Можно их приспособить. Там примерно так
//Линейная интерполяция
TAU = -N/2:N/2;
T = length(TAU);
P = tan(-pi*89/180:pi/180:pi*89/180);
R = length(P);
result = zeros(T, R);
for p = 1:R
for th = 1:T
for x = -T:T
xx = T+x; ................
4 фев 19, 18:39    [21801513]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Шашечки сдетектируются нормально после применения фильтра границ.

Литература отсылает меня к фильтру Собеля. Но... как мне кажется для черно-белых пикселов
можно его сильно упростить до сложения по модулю два по вертикали и по горизонатли.
Уже когда-то такое делал.
4 фев 19, 18:59    [21801530]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
В общем пример сразу не прошёл. Откопал МЛ, там есть примеры обоих пр-ний. Прошли практически сразу на примере фрагмента факса с поворотом на 1.5 гр (выше прикладывал).
Складываю в 2 порции вложений. Тестовые рис. с графикой надо готовить, могу посмотреть.
Правда думаю, что теперь только в выхи.

Радон здесь. В общем поворот на ~1-2 град детектируется отчётливо вплоть до самих строчек.
Угол - нижняя ось, диапазон от -10 до 170 град, тогда отсётливо виден 2-й пунктир около 0-2 гр - вертикальное направление суммирования.

К сообщению приложен файл. Размер - 100Kb
5 фев 19, 23:17    [21802246]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
Хаф.
Для него там готовое решение вместе с индикацией точек и с показометром найденных прямых на исходном рисунке.

Читается примерно так же, только, если в Радоне я сделал шаг по 1/2 гр, а по х шаг=2,то здесь куча вложенных п/программ - уже небыло сил влезать в них.
2 файла в зипе.

К сообщению приложен файл (Hough15grad.zip - 84Kb) cкачать
5 фев 19, 23:23    [21802249]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
exp98
Member

Откуда:
Сообщений: 1609
В случае Хафа наблюдаются ещё 3слабых вертик пунктира. Я так понял, что это 3 изолированные точки в правой верхней части исходника.

К сообщению приложен файл. Размер - 22Kb
5 фев 19, 23:27    [21802252]     Ответить | Цитировать Сообщить модератору
 Re: Четверговый архивариус  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Спасибо за investigation. Это часть задачи. Нужно детектировать еще абзацы и строки.
Иначе - символы не найду.

По поводу МЛ.

Мне МЛ - не помошник. Нужен код на императивном языке.
6 фев 19, 02:04    [21802296]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8   вперед  Ctrl      все
Все форумы / Программирование Ответить