我可以编写3倍嵌套循环的图像ede检测算法吗? [关闭]

问题描述 投票:0回答:1
我现在正在编写程序,我需要将当前像素与下面的像素进行比较,并在颜色距离大于边缘距离时将当前像素颜色设置为黑色。

代码:

public void edgeDetection(int edgeDist) { Picture swan = new Picture("swan.jpg"); Pixel leftPixel = null; Pixel rightPixel = null; Pixel[][] pixels = this.getPixels2D(); Color rightColor = null; Color botColor = null; Pixel botPixel = null; Pixel topPixel = null; Color topColor = null; for (int row = 1; row < pixels.length; row++) { for (int col = 0; col < pixels[0].length - 1; col++) { leftPixel = pixels[row][col]; rightPixel = pixels[row][col + 1]; rightColor = rightPixel.getColor(); for(int i = row + 1; i < pixels.length ; i++) { topPixel = pixels[i][col]; botPixel = pixels[row][col]; botColor = botPixel.getColor(); topColor = topPixel.getColor(); if(topPixel.colorDistance(botColor) > edgeDist) { topPixel.setColor(Color.BLACK); } else leftPixel.setColor(Color.WHITE); if (leftPixel.colorDistance(rightColor) > edgeDist) { leftPixel.setColor(Color.GREEN); } else leftPixel.setColor(Color.WHITE); } } } }

java image-processing pixel edge-detection
1个回答
0
投票
我最终弄清楚了。我删除了多余的循环,并重新整理了一些东西,它奏效了。代码:

public void edgeDetection(int edgeDist) { Pixel leftPixel = null; Pixel rightPixel = null; Pixel[][] pixels = this.getPixels2D(); Color rightColor = null; Color botColor = null; Pixel botPixel = null; Pixel topPixel = null; for (int row = 0; row < pixels.length - 1 ; row++) { for (int col = 0; col < pixels[0].length - 1; col++) { leftPixel = pixels[row][col]; rightPixel = pixels[row][col + 1]; rightColor = rightPixel.getColor(); topPixel = pixels[row][col]; botPixel = pixels[row + 1][col]; botColor = botPixel.getColor(); if (leftPixel.colorDistance(rightColor) > edgeDist) { leftPixel.setColor(Color.BLACK); } else if(topPixel.colorDistance(botColor) > edgeDist) { topPixel.setColor(Color.BLACK); } else topPixel.setColor(Color.WHITE); } } }

© www.soinside.com 2019 - 2024. All rights reserved.