Java: Статті Фільтрація і перетворення цифрових фотографій
Тестове зображення ви можете знайти в номері "Моделювання цифрових фотографій за допомогою ConvolveOp". Також ви можете взяти зображення тут. У прикладах коду нижче фотографія називається test.jpg. Зображення повинно бути в тій же директорії, де ви будете перевіряти приклади.
Для початку створимо основу для цих прикладів. Наступна програма, ExampleFramework (приклад основи), така ж, як і в прикладі в ConvolveOp. Також як і прикладах коду в попередніх радах ExampleFramework використовує JFrame, яка містить зображення та використовує JSlider. Однак щоб простіше розбиратися в різних фільтрах і перетвореннях, замість коду, що відноситься до спеціальних ефектів, помістили функції швидкого доступу. Для узгодженості оскільки він розглядався зображенню будуть звертатися як до filteredImage (відфільтроване), якщо до нього застосовували фільтри або перетворення.
Давайте в першому прикладі скористаємося аффіннимі перетвореннями для збільшення і зменшення зображення. Можливо, ви захочете звернутися до номера "Осягнення афінних перетворень" за деякими математичними деталями цих перетворень. Ви створите аффінниє перетворення і передасте два аргументи. Потім ви зробите нове зображення з старого за допомогою AffineTransformOp, яке ви вже створили. Нарешті, ви скажете об'єкту ExampleFramework оновити зображення на екрані. Ось код, який представляє ці кроки:
Перший аргумент визначає, який тип афінних перетворень (AffineTransform) ви створили. В даному випадку ви створюєте масштабування, звертаючись до функції getScaleInstance (), і посилаєте горизонтальні і вертикальні параметри. Другий аргумент визначає інтерполяційний тип. В даному випадку ви використовуєте тип TYPE_BILINEAR (білінійну тип), який вважає значення кожного пікселя як середнє сусідніх пікселів. Вашим іншим вибором може виявитися TYPE_NEAREST_NEIGHBOR (тип найближчого сусіда), який вставляє значення найближчих пікселів. Експериментуйте з кожним інтерполяційним типом в цьому прикладі. Зверніть увагу, що TYPE_BILINEAR трохи повільніше, але дає кращу якість зображення. Хоча TYPE_NEAREST_NEIGHBOR більш чутливий, зображення швидко ставати зернистим при збільшенні.
Відкомпілюйте а потім виконайте таку програму, ScaleExample.java, щоб побачити це перетворення в дії.
Інша Афінний перетворення - це поворот навколо фіксованої точки. Ви можете обчислити центр зображення. Потім ви можете надіслати цю інформацію разом з числом, на яке хочете повернути зображення, функції getRotateInstance (). Як і в попередньому прикладі ви можете замінити TYPE_BILINEAR на TYPE_NEAREST_NEIGHBOR і порівняти результати. Ось зміни для обертання.
RescaleOp () ініціалізується за встановленим першим параметром - множником. Якщо ви хочете представити вихідне зображення, множник повинен бути 1. Для освітлення зображень значення має бути більшим за одиницю, а для затемнення менше 1. Ви також можете скористатися другим аргументом, щоб визначити зміщення. Це значення буде додано в такий спосіб:
Експериментуйте з різними значеннями зсуву в наступній програмі, LinearBrightness.java (лінійна яскравість).
Відкомпілюйте і запустіть LookupExample (приклад пошуку). Зверніть увагу, що яскравість сильно відрізняється від тієї, що була при LinearBrightness (лінійному освітленні). Якщо ви хочете простежити за пікселями, які змінюються в міру того, як ви рухаєте повзунок, ви можете виділити їх функцією setBrightnessFactor ():
В останньому прикладі ви можете використовувати ColorConvertOp, щоб зробити зображення чорно-білим:
Можна застосовувати більш одного перетворення. Після цього ви можете використовувати фільтри з прикладу LookupExample до чорно-білому зображенню, як показано в наступній програмі, GrayExample (сірий приклад).
Починаючи з цих основних прикладів, ви зможете експериментувати, комбінуючи і розширюючи, що зробить складні і цікаві фільтри для цифрових зображень.
За додатковою інформацією по зображеннях дивіться: "Створення зображень"
Warning. mysql_connect () [function.mysql-connect]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11
Warning. mysql_db_query () [function.mysql-db-query]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19
Warning. mysql_db_query () [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19
Warning. mysql_fetch_array (): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Дізнайся про що ти насправді зараз думаєш тут.
[An error occurred while processing this directive]
Warning. mysql_connect () [function.mysql-connect]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91
Warning. mysql_db_query () [function.mysql-db-query]: Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93
Warning. mysql_db_query () [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93
Warning. mysql_fetch_array (): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95