日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

槑图秀秀 (初学JAVA第三篇)

發(fā)布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 槑图秀秀 (初学JAVA第三篇) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

槑圖秀秀

  • 前言
  • 一、圖像處理是什么?
  • 二、PS軟件介紹
    • 用戶界面及特性
  • 三、項目難點介紹
    • 1. 卷積
    • 2.圖片均衡化
  • 總結(jié)


前言

本次adalab項目主要是以學(xué)習(xí)圖像處理算法方面。
主要知識點為數(shù)組。


一、圖像處理是什么?

圖像處理是指對圖像進(jìn)行分析、加工、和處理,使其滿足視覺、心理或其他要求的技術(shù)。圖像處理是信號處理在圖像領(lǐng)域上的一個應(yīng)用。目前大多數(shù)的圖像均是以數(shù)字形式存儲,因而圖像處理很多情況下指數(shù)字圖像處理。此外,基于光學(xué)理論的處理方法依然占有重要的地位。

圖像處理是信號處理的子類,另外與計算機(jī)科學(xué)、人工智能等領(lǐng)域也有密切的關(guān)系。

傳統(tǒng)的一維信號處理的方法和概念很多仍然可以直接應(yīng)用在圖像處理上,比如降噪、量化等。然而,圖像屬于二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。

二、PS軟件介紹

用戶界面及特性


基礎(chǔ)功能:
逆時針和順時針旋轉(zhuǎn)、水平旋轉(zhuǎn)、反相、綠屏摳圖、卷積、裁剪、均衡化。

產(chǎn)品特性:
1.鄉(xiāng)村濾鏡
2.二值化
3.圖片去色
4.馬賽克
5.浮雕化

待開發(fā)特性:
1.放大鏡(目前仍然有bug)
2.各種濾鏡
3.美顏功能


三、項目難點介紹

1. 卷積

二維卷積

二維卷積是我們最常用的也是最重要的,圖像的邊緣計算和模糊等算法都是基于卷積操作的只不過是對應(yīng)的不同計算,卷積濾波器不同。


這里的kernel就是卷積核,kernel_size的大小一般是(3, 3)、(5, 5)、(7、7)這里是奇數(shù)的原因是因為方便計算。

代碼展示:

/*** 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; // 計算卷積時,使用的像素點數(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的卷積半徑來獲取周圍的像素點,再通過計算圖片中當(dāng)前像素點和周圍像素點相加的rgb像素值,再除以總像素點(一般為9個像素點)實現(xiàn)卷積效果

2.圖片均衡化

均衡化是一種主要應(yīng)用于灰度照片的圖像處理算法,可以增強(qiáng)畫面對比度。

均衡化效果(如下):

代碼如下:

/*** Method: 均衡化** @param source* @return*/public GImage equalization(GImage source) {int[] luminosityStatus = getLuminosityStatus(source);int[][] pixelArray = source.getPixelArray();int pixelOfPhotoHeight = pixelArray.length;int pixelOfPhotoWidth = pixelArray[0].length;for (int row = 0; row < pixelOfPhotoHeight; row++) {for (int col = 0; col < pixelOfPhotoWidth; col++) {int pixel = pixelArray[row][col];int r = GImage.getRed(pixel);int g = GImage.getGreen(pixel);int b = GImage.getBlue(pixel);int luminosity = computeLuminosity(r, g, b);int totalNumOfPixel = totalPixels(luminosityStatus, 0, luminosity + 1);int averageOfRGB = 255 * totalNumOfPixel / (pixelOfPhotoHeight * pixelOfPhotoWidth);int newImage = GImage.createRGBPixel(averageOfRGB, averageOfRGB, averageOfRGB);pixelArray[row][col] = newImage;}}return new GImage(pixelArray);}/*** Method: 獲取當(dāng)前像素點的亮度** @param source* @return*/private int[] getLuminosityStatus(GImage source) {int[][] pixelArray = source.getPixelArray();int pixelOfPhotoHeight = pixelArray.length;int pixelOfPhotoWidth = pixelArray[0].length;int[] luminosityStatus = new int[256];for (int row = 0; row < pixelOfPhotoHeight; row++) {for (int col = 0; col < pixelOfPhotoWidth; col++) {int pixel = pixelArray[row][col];int r = GImage.getRed(pixel);int g = GImage.getGreen(pixel);int b = GImage.getBlue(pixel);int luminosity = computeLuminosity(r, g, b);luminosityStatus[luminosity] += 1;}}return luminosityStatus;}/*** Method: 所有像素點** @param quantityOfPixel* @param beg* @param end* @return*/private int totalPixels(int[] quantityOfPixel, int beg, int end) {int total = 0;for (int a = beg; a < end; a++) {total += quantityOfPixel[a];}return total;}

實現(xiàn)步驟

首先需要計算亮度

亮度算法:

/* 計算圖片亮度 */ 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)整顏色時,R、G、B三個通道會被調(diào)整為相等的值,都等于 255 * 亮度小于等于當(dāng)前像素的像素個數(shù) / 整張圖片的像素數(shù)量 ,小數(shù)結(jié)果向下取整即可。


總結(jié)

圖像處理項目讓我初步了解算法知識和數(shù)組知識點,但我的主要問題還是無法獨立完成項目,需要經(jīng)常看別人代碼和講解才能一點一點摸出來。
總而言之,擠出時間學(xué)習(xí)java知識點以及學(xué)習(xí)好編程類英語知識,希望有一天能讀懂英文Manual。

總結(jié)

以上是生活随笔為你收集整理的槑图秀秀 (初学JAVA第三篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。