<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Работа для  программистов &#187; admin</title>
	<atom:link href="http://job-interview.ru/articles/post/author/admin/feed" rel="self" type="application/rss+xml" />
	<link>http://job-interview.ru/articles</link>
	<description>вакансии, вопросы, статьи</description>
	<lastBuildDate>Thu, 29 Mar 2012 20:53:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Выделение областей изображения со схожими цветовыми характеристиками</title>
		<link>http://job-interview.ru/articles/post/362</link>
		<comments>http://job-interview.ru/articles/post/362#comments</comments>
		<pubDate>Thu, 29 Mar 2012 20:30:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Алгоритмы]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[MatLab]]></category>
		<category><![CDATA[изображения]]></category>

		<guid isPermaLink="false">/articles/?p=362</guid>
		<description><![CDATA[
Сегодня на рынке программных продуктов можно найти огромный выбор средств для обработки изображений. Есть и такие гиганты как Adobe Photoshop и просто любительские программы, написанные студентами для курсовых проектов. Поэтому выбор пользователя в этом плане велик. В этой статье я не буду обсуждать программные средства для обработки изображений, аналитических статей на этот счет предостаточно. Тут [...]]]></description>
			<content:encoded><![CDATA[<p>
Сегодня на рынке программных продуктов можно найти огромный выбор средств для <strong>обработки изображений</strong>. Есть и такие гиганты как <em>Adobe Photoshop</em> и просто любительские программы, написанные студентами для курсовых проектов. Поэтому выбор пользователя в этом плане велик. В этой статье я не буду обсуждать программные средства для обработки изображений, аналитических статей на этот счет предостаточно. Тут я хочу рассмотреть очень подробно лишь только один маленький пункт из огромного количества предложенных путей обработки изображений.
</p>
<p>
<strong>Обработка изображений</strong> сейчас модное направление в области разработки <em>программного обеспечения</em>. Начать обработку изображения можно уже на стадии фотографирования.  По поводу качества такой обработки сказать ничего не могу, но такие возможности фотоаппаратов, как <strong>обнаружение лица</strong> и других объектов вполне себе работают и причем неплохо. Другое дело – это <em>распознавание лиц</em>, тут пока технологии отстают. Мой ноутбук никак не хочет идентифицировать меня по лицу!
</p>
<p><span id="more-362"></span></p>
<p>
Основой  обработки изображения является выделение области изображения со схожими характеристиками, такое, как, например, выделение образов. Список <strong>алгоритмов</strong> для выделения образов или сегментов уже давно известен и обсуждается многими. Хотя, что значит обсуждается? Просто добавляется каждый раз новая статистика по работе алгоритмов на практике &#8211;  как работает, с какой точностью.
</p>
<p>
Когда я слышу о задаче выделения областей,  у меня сразу возникает несколько вопросов:
</p>
<blockquote><p>
&mdash; По какому критерию производить сравнение?<br />
&mdash; Как определить, что пиксели относятся к одной области?
</p></blockquote>
<p>
Начнем с первого пункта. Тут я постараюсь описать все довольно просто.
</p>
<p>
Все изображение состоит из маленьких частиц-пикселей. На сегодняшний день <strong>пиксель</strong> может быть представлен двумя способами – это с помощью <strong>RGB</strong> или <strong>YCrCb</strong>. Это так называемое представление цветного пространства пикселя. Между двумя этими представлениями существуют формулы перехода от одного пространства к другому. На мой взгляд, цветное пространство YCbCr используется только в формате кодирования <strong>JPEG</strong>, так как позволяет значительно уменьшить хранимую информацию о пикселях. При работе с <em>растровыми изображениями</em> для анализа чаще всего рассматривают формат представления RGB, хотя в последнее время к нему добавили еще одну компоненту – это так называемая &#8220;<em>яркость</em>&#8220;. Таким образом, для рассмотрения алгоритмов в этой статье я выбираю представление пикселей в RGB &#8211; пространстве, при необходимости может добавится еще одна, четвертая компонента.
</p>
<p>
Вопрос отнесения пикселей к одной области изображения представляет собой  интересную задачу. <strong>Алгоритм</strong>, который определяет отношение пикселя к заданной области, называется «<strong>Выращивание регионов, дробление-слияние</strong>».  Смысл метода в том, чтобы постепенно добавлять к определённой области пиксели, удовлетворяющие характеристикам области.
</p>
<p>
Для присоединения пикселя к области  существует несколько алгоритмов. Это и алгоритм &#8220;<strong>k-средних</strong>&#8220;, и &#8220;<strong>watershed</strong>&#8221; алгоритм. Смысл алгоритмов определить критерий, границу, по которой будет происходить отбор пикселей.
</p>
<p>
Для выбора этой границы произведем <strong>анализ изображения</strong>. Будем оценивать изображение по распределению пикселей и их значению. Наиболее популярный инструмент для разработки и анализа алгоритмов, на мой взгляд, это <strong>Matlab</strong>. В последних версиях Matlab появился <strong>ToolBox</strong> для обработки и анализа изображения. Тут реализованы почти все функции, которые необходимы для этого.
</p>
<p>
Одна из самых популярных функций в Matlab для анализа – это <strong>построение гистограмм</strong>. Тут надо заметить, что стандартная функция для считывания изображения в память – это <em>imread()</em>. Это функция на выходе формирует трехмерный массив пикселей, где число строк и столбцов равно ширине и высоте изображения соответственно. Итак, после применения этой функции получаем массивы пикселей в пространстве RGB.
</p>
<p>
Для построения гистограммы требуется одномерный массив, поэтому построим три гистограммы.
</p>
<p>
Наше изображение
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/1.png" align="center" border="0">
</p>
<p>
Для построения гистограмм изображений предусмотрен специальный инструмент <em>imhist</em>, который строит распределения пикселей по цветам (256 цветов).
</p>
<p>
Гистограммы по трем матрицам.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/2.png" align="center" border="0">
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/3.png" align="center" border="0">
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/4.png" align="center" border="0">
</p>
<p>
Исходя из анализа гистограмм, сразу приходит идея о том, чтобы построить разделение на объекты при помощи разделения на цвета. То есть, тут можно отталкиваться от предположения, что, если, например, на значение пикселя в <strong>голубом канале</strong> приходится более 10000 пикселей, то эти пиксели, скорее всего, относятся к одной области. Для проверки были реализованы такие функции, которые показали следующий результат.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/5.png" align="center" border="0">
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/6.png" align="center" border="0">
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/7.png" align="center" border="0">
</p>
<p>
Эти результаты были получены, если принять гипотезу о том, что одинаковые пиксели соответствуют одной области.
</p>
<p>
Здесь мы постарались выделить области пикселей, которых наибольшее  количество в канале, далее можно использовать <em>рекуррентную функцию</em> для выделения подобных областей до тех пор, пока изображение не будет разбито на области по значению пикселей.
</p>
<p>
Для получения данного результата был применен следующий цикл.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">for</span> <span style="color: #33f;">i</span>=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:x
  <span style="color: #0000FF;">for</span> <span style="color: #33f;">j</span>=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:y
    <span style="color: #0000FF;">if</span><span style="color: #080;">&#40;</span><span style="color: #0000FF;">abs</span><span style="color: #080;">&#40;</span> fgrey<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span><span style="color: #080;">&#41;</span>-position <span style="color: #080;">&#41;</span> &lt; <span style="color: #33f;">2</span><span style="color: #080;">&#41;</span>
      fgrey<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span><span style="color: #080;">&#41;</span>=t;
      count=count+<span style="color: #33f;">1</span>;
    <span style="color: #0000FF;">end</span>
  <span style="color: #0000FF;">end</span>
<span style="color: #0000FF;">end</span></pre></div></div>

</p>
<p>
Здесь position &#8211; это значение пикселей, по которым происходит выборка областей. В этом выражении принимается поправка, что отклонение от выбранного значения может составлять 2 пункта.
</p>
<p>
Метод простой и легко реализуемый, хотя, конечно, он далек от совершенства. Вот тут я могу предложить небольшую модификацию метода, которая будет рассмотрена ниже.
</p>
<p>
В основе модификации лежит предположение о том, что значения пикселей в одной области или сегменте меняются постепенно, то есть осуществляется плавный переход. Например, в нашем изображении цвет неба плавно меняется от темного голубого к голубому. Этот метод больше похож на <strong>метод наращивания областей</strong>.
</p>
<p>
Рассмотрим тут его упрощенный вариант.
</p>
<p>
Будем рассматривать массив пикселей из трех подряд идущих значений. В нашем случае возьмем три пикселя. Найдем их среднее значение.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;">среднее=<span style="color: #080;">&#40;</span>f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>+<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span>/<span style="color: #33f;">3</span>;</pre></div></div>

</p>
<p>
Это значение примем за основу. Далее будем наращивать области, также используя три подряд идущих пикселя. Если разница значений удовлетворяет заданному критерию, то мы присоединяем эту область к исходной области, если нет, отбрасываем. Для трех матриц получаем следующий результат.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/8.png" align="center" border="0">
</p>
<p>
То есть мы видим, что изображение распадается на области с одинаковыми цветовыми значениями.
</p>
<p>
Функция для нахождения среднего по трем пикселям.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">for</span> z=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:<span style="color: #33f;">3</span>
  <span style="color: #0000FF;">for</span> <span style="color: #33f;">i</span>=<span style="color: #33f;">2</span>:<span style="color: #33f;">3</span>:x-<span style="color: #33f;">1</span>
    <span style="color: #0000FF;">for</span> <span style="color: #33f;">j</span>=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:y 
      dev=<span style="color: #080;">&#40;</span>f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>+<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span>/<span style="color: #33f;">3</span>;
      <span style="color: #0000FF;">if</span><span style="color: #080;">&#40;</span>dev~=<span style="color: #33f;">0</span><span style="color: #080;">&#41;</span>
	<span style="color: #0000FF;">break</span>;
      <span style="color: #0000FF;">end</span>
    <span style="color: #0000FF;">end</span>
  <span style="color: #0000FF;">end</span>
<span style="color: #0000FF;">end</span></pre></div></div>

</p>
<p>
Функция для выделения областей.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">for</span> z=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:<span style="color: #33f;">3</span>
  <span style="color: #0000FF;">for</span> <span style="color: #33f;">i</span>=<span style="color: #33f;">2</span>:<span style="color: #33f;">3</span>:x-<span style="color: #33f;">1</span>
    <span style="color: #0000FF;">for</span> <span style="color: #33f;">j</span>=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:y
      devnew=<span style="color: #080;">&#40;</span>f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>+f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>+<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span><span style="color: #080;">&#41;</span>/<span style="color: #33f;">3</span>;
      <span style="color: #0000FF;">if</span><span style="color: #080;">&#40;</span><span style="color: #080;">&#40;</span>dev-devnew<span style="color: #080;">&#41;</span>&lt;<span style="color: #33f;">0.1</span><span style="color: #080;">&#41;</span>
	dev=devnew;
	f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
	f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
	f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>+<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
      <span style="color: #0000FF;">end</span>
    <span style="color: #0000FF;">end</span>
  <span style="color: #0000FF;">end</span>
<span style="color: #0000FF;">end</span></pre></div></div>

</p>
<p>
Погрешность для трех пикселей принята равным 0.1, данный параметр можно изменить, но для этого изображения параметр 0.1 является наилучшим.
</p>
<p>
Таким образом, после применения всех фильтров мы получаем следующее изображение.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/9.png" align="center" border="0">
</p>
<p>
Визуальная оценка показывает, что выделение области вторым методом, дает более плавные переходы из одной области в другую.
</p>
<p>
Дальнейшее улучшение результатов даст возможность выделить области. Для этого надо использовать метод выделения пограничных контуров.
</p>
<p>
Тут можно использовать алгоритм выращивания областей от точки. Выбирая точку в пространстве пикселей, если она удовлетворяет заданному значению, мы присоединяем точку, если нет, пропускаем. Похоже на второй алгоритм, но тут идет привязка только по связным областям.
</p>
<p>
Например, выбирается точка из заданной области point(i,j), далее ищется точка со схожими значения в окружающем пространстве.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="matlab" style="font-family:monospace;"><span style="color: #0000FF;">for</span> <span style="color: #33f;">j</span>=point_j:<span style="color: #33f;">1</span>:y
  <span style="color: #0000FF;">if</span><span style="color: #080;">&#40;</span>F<span style="color: #080;">&#40;</span>point_i,<span style="color: #33f;">j</span><span style="color: #080;">&#41;</span>~=<span style="color: #33f;">0</span><span style="color: #080;">&#41;</span>
    <span style="color: #080;">&#91;</span>point_i,<span style="color: #33f;">j</span><span style="color: #080;">&#93;</span>=Point<span style="color: #080;">&#40;</span>F,point_i-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span><span style="color: #080;">&#41;</span>;
  <span style="color: #0000FF;">else</span>
    <span style="color: #0000FF;">for</span> z=<span style="color: #33f;">1</span>:<span style="color: #33f;">1</span>:<span style="color: #33f;">3</span>
      f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">2</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
      f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>-<span style="color: #33f;">1</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
      f<span style="color: #080;">&#40;</span><span style="color: #33f;">i</span>,<span style="color: #33f;">j</span>,z<span style="color: #080;">&#41;</span>=<span style="color: #33f;">0</span>;
    <span style="color: #0000FF;">end</span>
  <span style="color: #0000FF;">end</span>
<span style="color: #0000FF;">end</span></pre></div></div>

</p>
<p>
Здесь рассмотрение стоящих рядом точек идет только в одном направлении, сдвигаясь вправо по столбам.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/10.png" align="center" border="0">
</p>
<p>
Применение этого метода к уже частично обработанному изображению приближает нас к цели. Конечно, тут не получен идеальный вариант, но был рассмотрен <em>математический аппарат</em> для выделения областей со схожими характеристиками пикселей.
</p>
<p>
Следующим улучшением может быть создание более <em>интеллектуальной системы</em>, которая на основании некоторых изображений создает базу коэффициентов для отбора пикселей. Такие системы называются обучающимися.
</p>
<p>
Теперь рассмотрим реализацию этого примера на <em>языках программирования высокого уровня</em>.
</p>
<p>
В <em>.NET</em> существует класс Bitmap. Данный класс предоставляет большие возможности для <strong>обработки изображений</strong>.
</p>
<p>
Данный класс, также как и <strong>Matlab</strong>, представляет изображение в виде массива пикселей. Есть лишь одно отличие &#8211; вместо размерности матрицы три, в классе <strong>Bitmap</strong> представляется изображение в виде матрицы размерностью четыре.
</p>
<p>
Применим ту же фильтрацию, что и для Matlab, сделав только одно усовершенствование. Построим для каждого цвета что-то вроде <strong>гистограммы</strong>, но только будем объединять рядом стоящие значения пикселей. В нашем случае расстояние между схожими пикселями будет равно 4.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> FindMean<span style="color: #000000;">&#40;</span>BitmapIm, intlength, charcanal<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #FF0000;">int</span> middlepixel <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  middlepixel<span style="color: #008000;">=</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">460</span>,<span style="color: #FF0000;">256</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">G</span><span style="color: #008000;">;</span>
  <span style="color: #FF0000;">int</span> count <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  <span style="color: #FF0000;">int</span> countofcolor<span style="color: #008000;">=</span><span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  countofcolor<span style="color: #008000;">=</span>Math.<span style="color: #0000FF;">Abs</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">256</span><span style="color: #008000;">/</span>length<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  mas_color<span style="color: #008000;">=</span><span style="color: #008000;">new</span> <span style="color: #FF0000;">int</span><span style="color: #000000;">&#91;</span>countofcolor<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>countofcolor<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    mas_color<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
&nbsp;
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>canal<span style="color: #008000;">==</span><span style="color: #666666;">'B'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
	<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i,j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">B</span><span style="color: #008000;">!=</span>Color.<span style="color: #0000FF;">Black</span>.<span style="color: #0000FF;">B</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
	  mas_color<span style="color: #000000;">&#91;</span>Math.<span style="color: #0000FF;">Abs</span><span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">B</span> <span style="color: #008000;">/</span> length<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">++;</span>
	  count<span style="color: #008000;">++;</span>
	<span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>canal <span style="color: #008000;">==</span> <span style="color: #666666;">'G'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
	<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">G</span> <span style="color: #008000;">!=</span> Color.<span style="color: #0000FF;">Black</span>.<span style="color: #0000FF;">G</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
	  mas_color<span style="color: #000000;">&#91;</span>Math.<span style="color: #0000FF;">Abs</span><span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">G</span> <span style="color: #008000;">/</span> length<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">++;</span>
	  count<span style="color: #008000;">++;</span>
	<span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>canal <span style="color: #008000;">==</span> <span style="color: #666666;">'R'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
	<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">R</span> <span style="color: #008000;">!=</span> Color.<span style="color: #0000FF;">Black</span>.<span style="color: #0000FF;">R</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
	  mas_color<span style="color: #000000;">&#91;</span>Math.<span style="color: #0000FF;">Abs</span><span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">R</span> <span style="color: #008000;">/</span> length<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">++;</span>
	  count<span style="color: #008000;">++;</span>
	<span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>canal <span style="color: #008000;">==</span> <span style="color: #666666;">'A'</span><span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
	<span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">A</span> <span style="color: #008000;">!=</span> Color.<span style="color: #0000FF;">Black</span>.<span style="color: #0000FF;">A</span><span style="color: #000000;">&#41;</span>
	<span style="color: #000000;">&#123;</span>
	  mas_color<span style="color: #000000;">&#91;</span>Math.<span style="color: #0000FF;">Abs</span><span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">A</span> <span style="color: #008000;">/</span> length<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">++;</span>
	  count<span style="color: #008000;">++;</span>
	<span style="color: #000000;">&#125;</span>
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</p>
<p>
Здесь происходит распределение значений пикселей по цветовым компонентам. А именно, пиксели с близко стоящими значениями объединяются в группу. Расстояние между такими группами в нашем примере равно 4. В дальнейшем, благодаря этому массиву, можно выделять значения пикселей, которых в изображении большинство.
</p>
<p>
При помощи разделения каналов было установлено, что наилучший результат получается при выделение областей из голубого канала, наихудший результат получен при выделении из зеленого.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/11.png" align="center" border="0">
</p>
<p>
Как видно, выделилась область голубого неба.
</p>
<p>
С помощью наложения некоторых фильтров, сначала голубого, а потом красного, получается следующее изображение.
</p>
<p>
<img src="http://job-interview.ru/img/segmentation/12.png" align="center" border="0">
</p>
<p>
Пример кода, для обработки голубого канала.
</p>
<p>
<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> MarkBlue<span style="color: #000000;">&#40;</span>BitmapIm<span style="color: #000000;">&#41;</span>
<span style="color: #000000;">&#123;</span>
  <span style="color: #FF0000;">int</span> metka <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span>, count <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span>, count_opposite <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  <span style="color: #008080; font-style: italic;">// Color pixel = MarkIm.GetPixel(0, 0);</span>
  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> Color.<span style="color: #0000FF;">Black</span><span style="color: #000000;">&#41;</span>
	<span style="color: #008080; font-style: italic;">//    count++;</span>
&nbsp;
  count <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  FindMean<span style="color: #000000;">&#40;</span>Im, <span style="color: #FF0000;">4</span>,<span style="color: #666666;">'B'</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
  <span style="color: #FF0000;">int</span> maxColor <span style="color: #008000;">=</span> mas_color<span style="color: #000000;">&#91;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
  <span style="color: #FF0000;">int</span> maxIndex <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">256</span> <span style="color: #008000;">/</span> <span style="color: #FF0000;">4</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>maxColor<span style="color: #008000;">&lt;</span>mas_color<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>
    <span style="color: #000000;">&#123;</span>
      maxColor <span style="color: #008000;">=</span> mas_color<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
      maxIndex <span style="color: #008000;">=</span> i<span style="color: #008000;">;</span>
    <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #008080; font-style: italic;">//  MessageBox.Show(Convert.ToString(mas_color[20]));</span>
  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>maxIndex<span style="color: #008000;">&gt;</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">B</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">/</span> <span style="color: #FF0000;">4</span><span style="color: #000000;">&#41;</span>
      <span style="color: #000000;">&#123;</span>
	<span style="color: #008080; font-style: italic;">//  count++;</span>
	Im.<span style="color: #0000FF;">SetPixel</span><span style="color: #000000;">&#40;</span>i, j, Color.<span style="color: #0000FF;">Black</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
      <span style="color: #000000;">&#125;</span>
&nbsp;
  <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i<span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Width</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
    <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> j <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> j <span style="color: #008000;">&lt;</span>Im.<span style="color: #0000FF;">Height</span><span style="color: #008000;">;</span> j<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
      <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>Im.<span style="color: #0000FF;">GetPixel</span><span style="color: #000000;">&#40;</span>i, j<span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> Color.<span style="color: #0000FF;">Black</span><span style="color: #000000;">&#41;</span>
	count<span style="color: #008000;">++;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

</p>
<p>
Фактически, мы получили простой математический аппарат для выделения областей. Тут за основу принимается распределение пикселей по значению, геометрические и пространственные характеристики никак не учитываются.
</p>
<p>
В дальнейшем после применения фильтров для цвета пикселей, на мой взгляд, должен быть поставлен вопрос о правильном выделении пограничных контуров. Тут может возникнуть проблема, которая отображена на изображениях, приведенных выше. Что, если область принадлежит области &#8220;лошади&#8221;, но при этом цветовые характеристики совпадают с областью &#8220;неба&#8221;?
</p>
<p>
Думаю, для решения этой проблемы потребуется визуальная оценка результатов, сделанная человеком.
</p>
<p>
В общем, метод разбиения областей с помощью цветовых характеристик имеет много недостатков и в голом виде не может претендовать на законченность, однако, совершенствование и добавление новых путей решения в итоге приведет к хорошему результату.</p>
]]></content:encoded>
			<wfw:commentRss>http://job-interview.ru/articles/post/362/feed</wfw:commentRss>
		<slash:comments>23325</slash:comments>
		</item>
		<item>
		<title>Разработка в среде WEB: Java или PHP?</title>
		<link>http://job-interview.ru/articles/post/356</link>
		<comments>http://job-interview.ru/articles/post/356#comments</comments>
		<pubDate>Tue, 28 Feb 2012 18:31:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ООП]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">/articles/?p=356</guid>
		<description><![CDATA[Вместо предисловия.
Я постараюсь максимально объективно сравнить два языка. В конечном итоге, выбор платформы, стиля и языка &#8211; не определяющий фактор успеха. Главное, чтобы руки разработчика не повторяли форму интеграла. Ведь язык лишь инструмент, а инструмент, как известно, продолжение рук. 

Начнем.


WEB развивается уже второй десяток лет. Время статичных HTML-страниц кануло в истории, на смену которому пришел [...]]]></description>
			<content:encoded><![CDATA[<h2>Вместо предисловия.</h2>
<p>Я постараюсь максимально объективно сравнить два языка. В конечном итоге, выбор платформы, стиля и языка &#8211; не определяющий фактор успеха. Главное, чтобы руки разработчика не повторяли форму <em>интеграла</em>. Ведь язык лишь инструмент, а инструмент, как известно, продолжение рук. </p>
<p><span id="more-356"></span></p>
<h2>Начнем.</h2>
<p><img border="0" align="left" style="padding: 0px 10px 10px;" src="/img/javaphp/javaphp.jpg"></p>
<p style="height: 110px;">
<strong>WEB</strong> развивается уже второй десяток лет. Время статичных <strong>HTML-страниц</strong> кануло в истории, на смену которому пришел абстрактный стандарт <em>WEB2</em>, главное требование которого &#8211; взаимодействие с пользователем. Спорить, правильно ли это, конечно, можно, только в таком случае появляется вполне резонный вопрос: зачем читать эту статью, если она о средствах создания подобных сервисов? </p>
<h2>Порог вхождения.</h2>
<p>Традиционно для сравнительного анализа языков в первую очередь используют удобство синтаксиса, скорость работы и возможности.</p>
<p>Такой подход логичен для выбора собственного. А вот с точки зрения работодателя, качества самого программиста значительно важнее.</p>
<p><strong>PHP</strong> считается простым языком. Это не удивительно: от открытия учебника до первого &#8220;HelloWorld-a&#8221; проходит не больше 5 минут. С одной стороны это хорошо. Но подводных камней не мало.</p>
<p><img border="0" align="left" src="/img/javaphp/helloworld.jpg" style="padding: 10px;"></p>
<p>Потратив неделю на изучение PHP, можно научиться базовым приемам ввода-вывода, примитивной <em>выборке из БД</em> и парочке других алгоритмов обработки информации. С усложнением задач появляется соблазн <em>изобретать &#8220;велосипеды&#8221;</em> и &#8220;костыли&#8221; на основе старых знаний, делая код нечитабельным, уничтожая возможность дальнейшей поддержки на корню.</p>
<p>Работа с таким &#8220;<em>кодером</em>&#8221; в команде, или еще хуже, поддержка проекта, написанного им, превращается в будни школьного учителя. Естественно, это утверждение относится не ко всем, но такая проблема существует.</p>
<p>Что касается <strong>Java</strong>, порог вхождения очень высокий. Вместо &#8220;<em>Установка LAMP под Ubuntu</em>&#8221; и &#8220;<em>Скачать самоучитель PHP</em>&#8220;, необходимо вникнуть в <strong>сервлеты</strong>, взаимодействие между ними, <strong>jsp</strong>, научиться работе с каким-нибудь <em>фреймворком</em>.</p>
<p>Плюс <strong>ООП</strong>, который в Java обязателен. Если проводить аналогию, начало работы сравнимо с <em>высшей математикой</em> в ВУЗ-е: всех неспособных отправить на службу родине.</p>
<p>Подобный подход к оценке языка не панацея. Достаточно много серьезных проектов, написанных на <strong>PHP</strong>. Более того, на данный момент в сфере <strong>WEB-разработок</strong> он доминирует.</p>
<h2>Синтаксис и код.</h2>
<p><img border="0" align="left" src="/img/javaphp/sourcecode.jpg" style="padding: 10px;"></p>
<p>Одна из обсуждаемых проблем <strong>Java</strong> &#8211; длиннейшие названия классов и стандартных методов. Чего только стоит &#8220;<em>System.out.println()</em>&#8221; оного вместо &#8220;<em>echo</em>&#8221; на PHP. Конечно, это легко решается &#8220;<em>import</em>-ом&#8221; в начале документа или выбором современной <em>IDE</em>, в которой достаточно написать первую букву метода или поля, как появится возможность выбора нужного из списка. Тем не менее, отрицать впечатляющий объем кода на Java &#8211;  предвзято.</p>
<p><strong>PHP</strong> тоже не идеален. Взять к примеру обязательный знак доллара перед переменной. Конечно, рациональное зерно различия между обозначениями переменных и методами(функциями) присутствует. Лично у меня это вызывает жуткую головную боль. В первую очередь от созерцания самого знака. Плюс, я так и не сумел привить у себя<br />
привычки ставить доллар перед каждой переменной. Слишком меркантильно, что-ли&#8230;</p>
<p>Что касается кода, я думаю мало кто станет спорить, что серьезный проект == серьезная <em>работа в команде</em>. А работа в команде требует годного, понятного кода, качественную <em>документацию</em>, и возможность эффективно распределить работу.</p>
<p>Здесь принудительное ООП Java и <strong>Javadoc</strong> для документации дают ощутимый прирост в копилке аргументов &#8220;За Java&#8221;.</p>
<p>В PHP эти возможности так же есть. Сравнительно недавно я узнал о аналогах Javadoc в PHP- <strong>phpdoc</strong>/<strong>PhpDocumentor</strong>.</p>
<p>С известных версий PHP поддерживает объектный подход(ООП). Правда он смешанный, и соблазн написать простую функцию без обертки очень большой.</p>
<h2>Техническая площадка.</h2>
<p><img border="0" align="left" src="/img/javaphp/servers.jpg" style="padding: 10px;"></p>
<p>С кодом мы разобрались. А вот что касается хостинга, Java в проигрыше. <strong>PHP-хостинг</strong> распространен и он дешевле.</p>
<p>Правда под вопросом, стоит ли экономить на хостинге, если проект серьезный? Тем не менее, то, что заменить техническую основу проекта на PHP проще &#8211; факт.</p>
<p>Другой вопрос, если проект используется в интрасети. Стоимость <strong>хостинга</strong> отпадает. И программирование на стороне клиента дает плюс в сторону Java. Интеграция <em>апплетов</em> на нем в сети интернет потерпела крах, так как для запуска они требуют имплементатор на локалхосте. Но когда клиенты доступны физически, проблем нет.</p>
<p>Единая платформа, без связки разных языков &#8211; очевидный плюс. </p>
<h2>Вместо заключения.</h2>
<p>Я постарался не затрагивать сравнения технических характеристик языков. Такой информации в интернете полно. Так же считаю, что качество разработки значительно важнее. Язык создан для человека, а не для процессора. Для второго есть ассемблер.</p>
<p>Претензий на объективность у меня нет. Я попытался, насколько успешно- не знаю. Буду рад аргументированной критике.</p>
<p>Под конец повторюсь: все в руках разработчика, язык лишь инструмент. Профессионал и пальцем болт закрутит.</p>
]]></content:encoded>
			<wfw:commentRss>http://job-interview.ru/articles/post/356/feed</wfw:commentRss>
		<slash:comments>609</slash:comments>
		</item>
		<item>
		<title>Добро пожаловать на сайт, посвященный поиску работы для программистов.</title>
		<link>http://job-interview.ru/articles/post/1</link>
		<comments>http://job-interview.ru/articles/post/1#comments</comments>
		<pubDate>Mon, 15 Jun 2009 14:12:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Проект Job-Interview.ru]]></category>
		<category><![CDATA[job-interview.ru]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[проект]]></category>

		<guid isPermaLink="false">http://jo-in.ru/blog/?p=1</guid>
		<description><![CDATA[Предполагаемая аудитория &#8211; это люди, занимающиеся web-разработками, системным программированием и всем тем, что связано с IT.
Нашей целью является объединить людей этой профессии для оказания помощи друг другу в прохождении собеседования, составлении резюме, накоплении знаний. 
В разделе &#8220;Вопросы на собеседовании&#8221; мы будем выкладывать самые распространенные вопросы, которые задает работодатель соискателю, откликнувшемуся на его вакансию программиста. Раздел [...]]]></description>
			<content:encoded><![CDATA[<p>Предполагаемая аудитория &#8211; это люди, занимающиеся <em>web-разработками</em>, <em>системным программированием</em> и всем тем, что связано с <em>IT</em>.</p>
<p>Нашей целью является объединить людей этой профессии для оказания помощи друг другу в <strong>прохождении собеседования</strong>, составлении резюме, накоплении знаний. </p>
<p>В разделе <a href="/questions/" title="Вопросы на собеседовании для программистов">&#8220;Вопросы на собеседовании&#8221;</a> мы будем выкладывать самые распространенные вопросы, которые задает работодатель соискателю, откликнувшемуся на его вакансию программиста. Раздел будет постоянно пополняться, сейчас в нем можно найти вопросы по <a href="/questions/php" title="Вопросы на собеседовании по PHP">PHP</a>, <a href="/questions/cpp" title="Вопросы на собеседовании по C++">C++</a>, <a href="/questions/dotnet" title="Вопросы на собеседовании по .NET">.NET</a> и <a href="/questions/database" title="Вопросы на собеседовании по базам данных">базам данных</a>.</p>
<p>В разделе <a href="/vacancy/" title="Вакансии для программистов">&#8220;Вакансии&#8221;</a> вы сможете найти самые свежие объявления от работодателей для программистов. Раздел обновляется несколько раз в день.</p>
<p>Мы также предлагаем вам проверить свои знания, посетив раздел <a href="/test/" title="Тесты для программистов">&#8220;Тесты&#8221;</a>. Зарегистрированные пользователи при желании могут <strong>разместить свой тест</strong>, который им предлагали пройти на собеседовании, а затем в личном кабинете следить за статистикой прохождения теста другими пользователями сайта.</p>
<p>В разделе <a href="/books/">&#8220;Книги&#8221;</a> собраны <strong>книги для программистов</strong>. Здесь можно найти литературу по самым разным IT-тематикам: <em>устройство компьютера</em> и <em>работа с &#8220;железом&#8221;</em>, <em>языки программирования</em> и <em>алгоритмы</em>, <em>компьютерные сети</em>, а также многое другое. </p>
<p>Если вы опытный <strong>программист</strong>:</p>
<div style="padding-left: 10px">На нашем сайте вы можете рассказывать о своем опыте прохождения собеседований, выкладывать различные <em>вопросы</em>, на которые вам приходилось отвечать, а также делиться знаниями с пока менее продвинутыми коллегами. Для этого в разделе <a href="/articles">&#8220;Статьи&#8221;</a> мы предлагаем вам выкладывать свои соображения по всем вышеперечисленным вопросам.</div>
<p>Если вы начинающий <strong>программист</strong>:</p>
<div style="padding-left: 10px">Вы получаете возможность общаться и набираться знаний. Задавайте свои вопросы и советуйтесь с теми, кто уже сталкивался с вашими проблемами.</div>
<p>
Итак, </p>
<ul>
<li>если вы готовитесь к собеседованию или вам просто интересно узнать о самых распространенных <strong>вопросах на собеседовании</strong>, то вам <a href="/questions/">сюда</a>.</li>
<li>если вы в поисках работы, то посетите раздел <a href="/vacancy/" title="Вакансии для программистов">Вакансии для программистов</a>, в котором всегда самые свежие предложения от работодателей.</li>
<li>если вам есть, что рассказать, или вы хотели бы получить ответ на какой-либо вопрос от более опытных коллег, вам <a href="/articles">сюда</a>.  Вы также можете <strong>разместить свою статью</strong>, для этого необходимо будет пройти простую процедуру <a href="/articles/login?action=register">регистрации</a>.</li>
<li>если вы хотите проверить свои знания, то вам в раздел <a href="/test/" title="Тесты для программистов">Тесты для программистов</a>.</li>
</ul>
<p>
Присоединяйтесь к нашей <a target="_blank" href="http://vkontakte.ru/club17930164" rel="external nofollow">группе Вконтакте</a>.<br />
<a target="_blank" href="http://vkontakte.ru/club17930164" rel="external nofollow"><br />
<img border="0" src="/img/vkontakte.jpg"><br />
</a>
</p>
<p>Следите за нашими вакансиями в <a title="Следите за нашими вакансиями в Twitter" rel="external nofollow" href="http://twitter.com/jobinterview_ru" target="_blank">Twitter</a> <a title="Следите за нашими вакансиями в Twitter" rel="external nofollow" href="http://twitter.com/jobinterview_ru" target="_blank" style="text-decoration: none;">&nbsp;<img border="0" src="/img/Twitter_32x32.png"></a></p>
<p>Желаем удачи,<br />
 Команда Job-Interview.ru</p>
]]></content:encoded>
			<wfw:commentRss>http://job-interview.ru/articles/post/1/feed</wfw:commentRss>
		<slash:comments>8328</slash:comments>
		</item>
	</channel>
</rss>
