Покращення зображень за допомогою математичного пакета MathLab

Мета:

  • ознайомитися із базовими функціями обробки зображень у пакеті МАТЛАБ;
  • вивчити засоби покращення зображень;
  • ознайомитися із стандартними методами обробки гістограм;
  • вивчити типи шумів на зображенні;
  • навчитись видаляти шуми.

Порядок виконання роботи

1. Створимо новий M-File та завантажимо зображення за допомогою стандартного діалогу операційної системи

pathDat=([cd ‘work*.jpg’]);
[filename, pathname] = uigetfile(pathDat);
fullname=strcat(pathname, filename);
I=imread(fullname);
iptsetpref(‘ImshowAxesVisible’,‘on’)
figure;
imshow(I);

Виконуємо команду Debug/Save and run. На екрані повинно з’явитися вікно для обрання зображення “Select File to Open”. Обираємо файл та відкриваємо його.

2. Розглянемо приклад обробки тестового зображення МАТЛАБ. Спочатку треба загрузити його, а потім проаналізуємо його гістограму. Для цього необхідно виконати команди

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

Після виконання команди Debug/Save and run на екрані з’являється зображення (рис. 1). Як бачимо, це зображення світле.

Рис. 1 – Тестове зображення та його гістограма яскравості

Гістограма зображення широка, тобто діапазон значень яскравостей великий. Спробуємо ще більше покращити якість зображення за допомогою функції imadjust.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

Після виконання команди Debug/Save and run на екрані з’являється зображення (рис. 2).

Можна помітити, що зовнішній вигляд гістограми майже не змінився, окрім того, що вона стала більш розтягнута, діапазон значень став більше. Це призводить по появи нових яскравостей, і в свою чергу до покращення зображення.

Рис. 2 - Результат покращення гістограми

Спробуємо до вихідного зображення застосувати іншу функцію обробки гістограми histeq. Результати покращення гістограми приведений на рис. 3.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

I2 = histeq(I);
imshow(I2)
figure, imhist(I2)

Рис. 3 – Результат застосування функції histeq

Розглянемо тепер функцію adapthisteq. Приклад її застосування приведено нижче.

I = imread(‘cameraman.tif’);
imshow(I);
figure, imhist(I)

I1 = imadjust(I);
imshow(I1)
figure, imhist(I1)

I2 = histeq(I);
imshow(I2)
figure, imhist(I2)

I3 = adapthisteq(I);
imshow(I3)
figure, imhist(I3)

Рис. 4 - Результат застосування функції adapthisteq

3. Розглянемо приклади видалення шумів на фотографіях. Завантажимо тестову фотографію та додамо на неї шум типу «сіль та перець». Зробимо це за допомогою коду:

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I,‘salt & pepper’,0.02);
figure, imshow(J)

Рис. 5 – Комбінація зображення та шуму «salt&pepper»

Спробуємо тепер відфільтрувати зашумлене зображення за допомогою функцій МАТЛАБ.

L = medfilt2(J,[3 3]);
figure, imshow(L)

Завантажимо тестову фотографію та додамо на неї шум типу «gaussian».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I,‘gaussian’,0.02);
figure, imshow(J)

Рис. 6 - Результат використання параметру «gaussian»

Завантажимо тестову фотографію та додамо на неї шум типу «poisson».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I, ‘poisson’);
figure, imshow(J)

Рис. 7 - Результат використання параметру «poisson»

Завантажимо тестову фотографію та додамо на неї шум типу «speckle».

I = imread(‘eight.tif’);
imshow(I)
J = imnoise(I, ‘speckle’, 0.6);
figure, imshow(J)

Рис. 8 – Результат використання параметру «speckle»

4. Розглянемо роботу функцій imsubtract, imadd, imabsdiff, im2bw, rgb2gray.

іmsubtract – віднімає одне зображення з іншого або константу з зображення.

Z = imsubtract(X,Y)

Віднімемо фонове зображення.

I = imread(‘rice.png’);
figure, imshow(I);
background = imopen(I,strel(‘disk’,15));
Ip = imsubtract(I,background);
figure, imshow(Ip,[])

Рис. 9 – Результат віднімання фону від зображення

Віднімемо константне значення з зображення.

I = imread(‘rice.png’);
figure, imshow(I);
background = imopen(I,strel(‘disk’,15));
Ip = imsubtract(I,background);
figure, imshow(Ip,[])

Iq = imsubtract(I,60);
figure, imshow(Iq)

Рис. 10 – Результат віднімання константного значення від зображення

іmadd – складає два зображення або додає константу до зображення

Z = imadd(X,Y)

Складемо два зображення  та визначимо вихідний клас.

I = imread(‘rice.png’);
J = imread(‘cameraman.tif’);
K = imadd(I,J,‘uint16’);
imshow(K,[])

Рис. 11 – Результат складання двух зображень

I1 = imread(‘rice.png’);
J1 = imadd(I1,50);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)

Рис. 12 – Результат додавання константного значення до зображення

іmabsdiff визначає абсолютну відмінність двох зображень.

Z = imabsdiff(X,Y)

Виведемо абсолютну різницю між відфільтрованим зображенням та оригіналом.

I = imread(‘cameraman.tif’);
J = uint8(filter2(fspecial(‘gaussian’), I));
K = imabsdiff(I,J);
imshow(K,[]) % [] = scale data automatically

Рис. 13 – Абсолютна різниця між відфільтрованим зображенням та оригіналом

im2bw – переводить зображення в двiйковий образ, що заснований на порозi

BW = im2bw(I, level)

BW = im2bw(X, map, level)

BW = im2bw(RGB, level)

Завантажимо зображення з деревами.

BW = im2bw(X,map,0.4);
imshow(X,map), figure, imshow(BW)

Рис. 14 – Зображення в двійковому образі, що засноване на порозі

rgb2gray – переводить зображення в RGB або в палiтру вiдтiнкiв сiрого

I = rgb2gray(RGB)

newmap = rgb2gray(map)

Перетворио RGB зображення в зображення з вiдтiнками сiрого

I = imread(‘board.tif’);
J = rgb2gray(I);
figure, imshow(I), figure, imshow(J);

Рис. 17 – Перетворене RGB зображення в зображення з відтінками сірого


im2bw –  переводить зображення в двійковий образ, що заснований на порозі

BW = im2bw(I,level)

BW = im2bw(X,map,level)

BW = im2bw(RGB,level)

Завантажимо дерева.

Advertisements

Простой web Java чат. Часть 2 – Создание Servlet и JavaServer Pages (JSPs). Результаты тестирования простого чата

Создание Servlet

1)       Создадим пакет levkat.chatfilews.jsp.controller в папке src нашего Web Dynamic проекта

2)       Создадим Servlet в этом пакете с названием Controller

Создание Servlet - шаг 1
Создание Servlet - шаг 2
Создание Servlet - шаг 3

Контроллер будет проверять, какие параметры были переданы в сервлет, а затем перенаправит запрос на правильный JSP.

Таки же образом создаем и второй сервлет – MessageLog.java .

Создание Views (JSP)

1)    Выберите папку «WebContent», в контекстном меню New > JSP

Создание JSP - шаг 1
Создание JSP страницы - шаг 2
Создание JSP страницы - шаг 3

2)    Аналогично создаем Chat.jsp

3)    Выберите Login.jsp, выполните Run As… > Run on Server.

Далее реализовываем метод doPost() классов Servlet и модифицируем Login.jsp и Chat.jsp (исходники скачать можно здесь , не забудьте удалить разширение .doc).

Примеры таблиц базы данных и работы чата

Таблица User
Таблица Message
Вход в чат при помощи существующего аккаунта - Sofia
Пример вывода ошибки при попытке войти в чат с неправильным именем или паролем
Простой чат после входа в систему
Пример отправки сообщения только что вошедшим пользователем - Sofia
Пример добавления записи в таблицу Message (ведение log журнала)

Использованные источники:

  1. http://www.ibm.com/developerworks/ru/library/os-dw-os-wtpservice-i/index.html
  2. http://www.toodlepip.co.uk/blog/2008/08/using-sqlite-eclipse-and-dbedit
  3. http://en.wikibooks.org/wiki/An_Introduction_to_Java_JDBC_using_SqLite/Example_base_class
  4. http://www.vogella.de/articles/EclipseWTP/article.html
  5. http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/
  6. http://ru.wikipedia.org/wiki/JQuery
  7. http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82

Простой web Java чат. Часть 1 – Настройка Eclipse, подлючение провайдера базы данных, создание и тестирование web-сервиса

Пост описывает выполнение контрольной работы по дисциплине “Internet-технологии и язык Java ”

на тему: “ Реализация корпоративной системы передачи мгновенных сообщений между сотрудниками корпорации”.

Конечно же тема звучит очень серьезно как это часто бывает в институтах, но сам чат на самом деле выглядит простым. Хотя с его помощью можно будет разобраться с такими вопросами:

  1. Какое необходимо программное обеспечение для реализации web чата на Java ?
  2. Как настроить Eclipse для Tomcat ?
  3. С чего начать создание web сирвиса?
  4. Как добавить драйвер базы данных?
  5. Как создать Servlet и JSP ?
  6. Как реализовать нажатие кнопки мыши (click) по кнопке на JSP странице?
  7. Как отображать информацию без перезагрузки страницы?
  8. Как получить доступ к любому элементу DOM?
Исходники вы можете скачать здесь – SimpleChatAndFileSharing.zip (не забудьте удалить разширение .doc).

Чтобы запустить приложение вам понадобиться выполнить некоторые шаги, которые будут описаны ниже и поменять путь, присвоенный константе JDBC_URL (класс DataAccessLayer, строка 24).

Итак, для начала само задание:

1. Реализовать сервер, который:

а) регистрирует пользователя;

б) передает список on-line пользователей клиенту и поддерживает его в активном состоянии;

в) фиксирует время передаваемых сообщений, ведет log журнал.

2. Реализовать клиент, который:

а) отправляет запрос об регистрации пользователя на сервер;

б) получает список on-line пользователей с сервера и обновляет его в реальном времени;

в) передает и отправляет сообщение другому клиенту.

Необходимое программное обеспечение

1. Eclipse Galileo
2. Apache-tomcat
3. Java SDK
4. sqlitejdbc-v056.jar
5. jQuery.js

В моем случае библиотеку можно будет найти по пути SimpleChatAndFileSharingChatAndFileSharingWebContentassetsjQuery.js

6. jquery.timers-1.2.js

В моем случае библиотеку можно будет найти по пути SimpleChatAndFileSharingChatAndFileSharingWebContentassets jquery.timers-1.2.js

Настройка переменных среды окружения (Vista)

1)       Выполнить Пуск/Компьютер, Свойства Компьютера, Дополнительные параметры системы.

2)       В окне «Свойства системы» выполнить «Переменные среды…».

3)       В окне «Переменные среды» выбрать переменную PATH и выполнить «Изменить…». Установить значение переменной C:SunSDKbin;C:SunSDKjdkjrebin

4)       В окне «Переменные среды» создать переменную JAVA_HOME, установить значение C:SunSDKjdk

Настройка Eclipse для Tomcat

1)       Запустите Eclipse.

2)       Выберите Window > Preferences.

3)       Выберите Server >Runtime Environments

4)       Нажмите Add…

5)       Выберите Apache > Apache Tomcat v6.0 и нажмите Next.

6)       Задайте свойства (ниже представлены примерные свойства) и нажмите Finish.

Name: Apache Tomcat v6.0

Tomcat installation directory: D:SoftApache-tomcat-6.0.24

JRE: jdk

7)       Диалоговое окно Preferences должно выглядеть следующим образом:

Preferences > Server > Runtime Environments > Edit...

8)        Выполните Ok в окне Preferences.

Создание нового динамического Web-проекта

Следующим шагом будет создание динамического Web-проекта. В конечном итоге проект будет содержать Java-код, вызываемый Web-сервисом.

1)       Выберите File > New > Other.

2)       Выберите Web > Dynamic Web Project и нажмите Next.

Создание динамического web проекта

3)       Укажите следующие параметры и нажмите Finish.

Project name: ChatAndFileSharing

Target runtime: Apache Tomcat v6.0

Dynamic web module version: 2.5

Configuration: Default Configuration for Apache Tomcat v6.0

Параметры динамического web проекта

Настройка Data Management

1)       Скопируйте sqlitejdbc-v056.jar в папку WebContentWEB-INFlib

2)       Выберите Window > Preferences.

3)       Data Management > Connectivity > Driver Definitions

4)       Выполнить настройки как показано на скриншотах ниже

Настройка Data Management
Настройки Name/Type
Настройки Jar List
Настройки Properties

Настройка параметров Debug

Контекстное меню кнопки Debug As...

1)       Запустить дебаг приложения использую кпопку «Debug».

2)       В контекстном меню кнопки Debug As… (выглядит как жук) выбираем Debug Configurations…

3)       Выбираем пункт Tomcat v6.0 Server at localhost и переходим на закладку Classpath

4)       Выполняем «Add External JARs…», указываем путь к файлу sqlitejdbc-v056.jar, выполняем «Открыть»

Настройка параметров Debug

Работа с базой данных в перспективе Database Development

1)       Откройте перспективу Database Development.

2)       В окне Data Source Explorer выберите пункт Database Connections, в конекстном меню выполнить New…

3)       В окне Connection Profile выбрать SQLite

Name: SQLite DB

4)       На следующем шаге должно появиться окно Specify a Driver and Connection Details

5)       Выполните «Test Connection». В случае успеха должно появится сообщение как показано ниже

Успешное соединение

6)       В окне Data Source Explorer должна отобразится структура базы данных

Структура базы данных

Создаем основные Java-файлы

1)    IChatSercice.java

2)    Chat.java

3)    ChatMessage.java

4)    ChatPerson.java

5)    DataAccessLayer.java

Файлы для скачивания доступны в начале данного поста.

Создание Web-сервиса из Java-файлов

Теперь мы опишем шаги, позволяющие Web-сервису вызывать Java-код.

1)       Убедитесь в том, что файлы .java скомпилированы. Для этой цели нажмите Project > Clean…, выберите Clean all projects и нажмите OK.

2)       В пакете levkat.chatfilews.core правой кнопкой выберите класс с расширением *.java и нажмите Web Services > Create Web Service.

3)       Оставьте значения, заданные по умолчанию и нажмите Next.


Создание web-сервиса

Тестирование Web-сервиса при помощи Web Services Explorer

1)       Выберите файл *.wsdl

2)       В контекстном меню выбрать Web Services/Test with Web Service Explorer

3)       Раскрыть дерево TestService

4)       Выбрать необходимый метод, ввести параметры при необходимости и выполнить Go.

5)       Просмотреть *.wsdl файл можно в окне браузера по ссылке, например http://localhost:8080/ChatAndFileSharing/services/Chat?wsdl. Сервер должен быть запущен.

Продолжение выполнения работы будет описано в посте Простой web Java чат. Часть 2

Использованные источники:

  1. http://www.ibm.com/developerworks/ru/library/os-dw-os-wtpservice-i/index.html
  2. http://www.toodlepip.co.uk/blog/2008/08/using-sqlite-eclipse-and-dbedit
  3. http://en.wikibooks.org/wiki/An_Introduction_to_Java_JDBC_using_SqLite/Example_base_class
  4. http://www.vogella.de/articles/EclipseWTP/article.html
  5. http://www.devirtuoso.com/2009/07/beginners-guide-to-using-ajax-with-jquery/
  6. http://ru.wikipedia.org/wiki/JQuery
  7. http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B2%D0%BB%D0%B5%D1%82

Определение величины предотвращенного экологического ущерба народному хозяйству за счет усовершенствования технологий

Возможно, данный пост поможет кому-то сдать зачет по экологии на 2ом курсе ХНЭУ (преподаватель Орехов В.Н.)

Задание

На предприятии проведено усовершенствование технологического процесса сжигания топлива. В результате уменьшились выбросы пыли и SO2 в атмосферу. Определить величину предотвращенного экологического ущерба народному хозяйству за счет усовершенствования технологий.

Для расчета использовать следующие данные, представленные в таблице.

Зона района Уровень загрязнения, мг/м2 Численность населения Ri, тыс.чел. Стоимость  основных фондов Фі, млн. Площадь Si, га
Пыль SO2
До После До После
1 1,18 0,98 0,68 0,48 5 200 10
2 1,08 0,78 0,58 0,38 8 150 20
3 0,98 0,68 0,48 0,28 13 130 50
4 0,88 0,58 0,38 0,18 17 250 70

Проведем расчет экономического ущерба по каждому подразделению.

Поскольку расчетов предстоит выполнить очень много, то предлагаю просто скачать документ – Raschet po kazdomy podrazdeleniu