槑图秀秀 (初学JAVA第三篇)
槑圖秀秀
- 前言
- 一、圖像處理是什么?
- 二、PS軟件介紹
- 用戶界面及特性
- 三、項(xiàng)目難點(diǎn)介紹
- 1. 卷積
- 2.圖片均衡化
- 總結(jié)
前言
本次adalab項(xiàng)目主要是以學(xué)習(xí)圖像處理算法方面。
主要知識點(diǎn)為數(shù)組。
一、圖像處理是什么?
圖像處理是指對圖像進(jìn)行分析、加工、和處理,使其滿足視覺、心理或其他要求的技術(shù)。圖像處理是信號處理在圖像領(lǐng)域上的一個(gè)應(yīng)用。目前大多數(shù)的圖像均是以數(shù)字形式存儲,因而圖像處理很多情況下指數(shù)字圖像處理。此外,基于光學(xué)理論的處理方法依然占有重要的地位。
圖像處理是信號處理的子類,另外與計(jì)算機(jī)科學(xué)、人工智能等領(lǐng)域也有密切的關(guān)系。
傳統(tǒng)的一維信號處理的方法和概念很多仍然可以直接應(yīng)用在圖像處理上,比如降噪、量化等。然而,圖像屬于二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。
二、PS軟件介紹
用戶界面及特性
基礎(chǔ)功能:
逆時(shí)針和順時(shí)針旋轉(zhuǎn)、水平旋轉(zhuǎn)、反相、綠屏摳圖、卷積、裁剪、均衡化。
產(chǎn)品特性:
1.鄉(xiāng)村濾鏡
2.二值化
3.圖片去色
4.馬賽克
5.浮雕化
待開發(fā)特性:
1.放大鏡(目前仍然有bug)
2.各種濾鏡
3.美顏功能
三、項(xiàng)目難點(diǎn)介紹
1. 卷積
二維卷積
二維卷積是我們最常用的也是最重要的,圖像的邊緣計(jì)算和模糊等算法都是基于卷積操作的只不過是對應(yīng)的不同計(jì)算,卷積濾波器不同。
這里的kernel就是卷積核,kernel_size的大小一般是(3, 3)、(5, 5)、(7、7)這里是奇數(shù)的原因是因?yàn)榉奖阌?jì)算。
代碼展示:
/*** Method: 圖片卷積** @param source* @return*/public GImage convolution(GImage source) {int[][] pixelArray = source.getPixelArray();int pixelOfPhotoHeight = pixelArray.length;int pixelOfPhotoWidth = pixelArray[0].length;int[][] newPixelArray = new int[pixelOfPhotoHeight][pixelOfPhotoWidth];for (int y = 0; y < pixelOfPhotoHeight; y++) {for (int x = 0; x < pixelOfPhotoWidth; x++) {newPixelArray[y][x] = getPixel(pixelArray, x, y);}}return new GImage(newPixelArray);}/*** Method: 獲得圖片卷積參數(shù)** @param pixelArray* @param x* @param y* @return*/private int getPixel(int[][] pixelArray, int x, int y) {int pixelOfPhotoHeight = pixelArray.length;int pixelOfPhotoWidth = pixelArray[0].length;int rSum = 0;int bSum = 0;int gSum = 0;int pixelCount = 0; // 計(jì)算卷積時(shí),使用的像素點(diǎn)數(shù)int xMin = Math.max(x - CONVOLUTION_RADIUS, 0);int xMax = Math.min(x + CONVOLUTION_RADIUS, pixelOfPhotoWidth - 1);int yMin = Math.max(y - CONVOLUTION_RADIUS, 0);int yMax = Math.min(y + CONVOLUTION_RADIUS, pixelOfPhotoHeight - 1);for (int row = yMin; row <= yMax; row++) {for (int col = xMin; col <= xMax; col++) {int pixel = pixelArray[row][col];rSum += GImage.getRed(pixel);bSum += GImage.getBlue(pixel);gSum += GImage.getGreen(pixel);pixelCount++;System.out.println(row + " " + col + " " + pixelCount);}}return GImage.createRGBPixel(rSum / pixelCount, gSum / pixelCount, bSum / pixelCount);}主要步驟:
通過長度為1的卷積半徑來獲取周圍的像素點(diǎn),再通過計(jì)算圖片中當(dāng)前像素點(diǎn)和周圍像素點(diǎn)相加的rgb像素值,再除以總像素點(diǎn)(一般為9個(gè)像素點(diǎn))實(shí)現(xiàn)卷積效果
2.圖片均衡化
均衡化是一種主要應(yīng)用于灰度照片的圖像處理算法,可以增強(qiáng)畫面對比度。
均衡化效果(如下):
代碼如下:
實(shí)現(xiàn)步驟
首先需要計(jì)算亮度
亮度算法:
/* 計(jì)算圖片亮度 */ public default int computeLuminosity(int r, int g, int b) {return GMath.round(0.299 * r + 0.587 * g + 0.114 * b);使用方式:
int luminosity = computeLuminosity(red, green, blue);然后調(diào)整顏色
調(diào)整顏色時(shí),R、G、B三個(gè)通道會被調(diào)整為相等的值,都等于 255 * 亮度小于等于當(dāng)前像素的像素個(gè)數(shù) / 整張圖片的像素?cái)?shù)量 ,小數(shù)結(jié)果向下取整即可。
總結(jié)
圖像處理項(xiàng)目讓我初步了解算法知識和數(shù)組知識點(diǎn),但我的主要問題還是無法獨(dú)立完成項(xiàng)目,需要經(jīng)常看別人代碼和講解才能一點(diǎn)一點(diǎn)摸出來。
總而言之,擠出時(shí)間學(xué)習(xí)java知識點(diǎn)以及學(xué)習(xí)好編程類英語知識,希望有一天能讀懂英文Manual。
總結(jié)
以上是生活随笔為你收集整理的槑图秀秀 (初学JAVA第三篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 明道云在建筑工程行业的应用场景
- 下一篇: [Luogu3554] Poi2013