资源简介
基于霍夫变换的形状检测算法研究与实现,内包含源代码和论文,用java算法实现。原创!
代码片段和文件信息
package com.liyulin.hough.circle;
import java.awt.image.BufferedImage;
public class AutoHoughCircle {
private BufferedImage oldImage = null; // 原始图片缓存对象
private BufferedImage newImage = null; // Hough处理后的图片缓存对象
private int imageWidth;
private int imageHeight;
private int[] pixels; // 图片所有像素值
private int[] acc; // 各个像素点累加值
private int threshold = 360;// 阈值
public AutoHoughCircle(BufferedImage image) {
oldImage = image;
imageWidth = oldImage.getWidth();
imageHeight = oldImage.getHeight();
pixels = new int[imageWidth * imageHeight];
// 获取边缘像素值
for (int y = 0; y < imageHeight; y++) {
for (int x = 0; x < imageWidth; x++) {
pixels[x + y * imageWidth] = oldImage.getRGB(x y);// 获取矩阵指定位置(x y)的像素值
}
}
pixels = houghDetect();
newImage = new BufferedImage(imageWidth imageHeight BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < imageHeight; i++) {
for (int j = 0; j < imageWidth; j++) {
newImage.setRGB(j i pixels[j + i * imageWidth]);
}
}
}
/**
* 霍夫变换处理 - 检测半径大小符合的圆的个数
* 1. 将图像像素从2D空间坐标转换到极坐标空间
* 2. 在极坐标空间中归一化各个点强度,使之在0〜255之间
* 3. 根据极坐标的R值与输入参数(圆的半径)相等,寻找2D空间的像素点
* 4. 对找出的空间像素点赋予结果颜色(红色)
* 5. 返回结果2D空间像素集合
*
* @return int []
*/
public int[] houghDetect() {
// 对于圆的极坐标变换来说,我们需要360度的空间梯度叠加值
acc = new int[imageWidth * imageHeight];// 默认值为0
int x0 y0; // 圆心坐标
double t;
int r_start = 50;
for (int r = r_start r_threshold = Math.min(imageHeight imageWidth) / 2; r < r_threshold; r = r + 1) {
for (int x = 0; x < imageWidth; x++) {
for (int y = 0; y < imageHeight; y++) {
acc[x + (y * imageWidth)] = 0;
}
}
for (int x = 0; x < imageWidth; x++) {
for (int y = 0; y < imageHeight; y++) {
if ((pixels[y * imageWidth + x] & 0xff) == 255) {
// 进行Hough变换
for (int theta = 0; theta < 360; theta++) {
t = (theta * 3.14159265) / 180; // 角度值0 ~ 2*PI
x0 = (int) Math.round(x - r * Math.cos(t));
y0 = (int) Math.round(y - r * Math.sin(t));
if (x0 < imageWidth && x0 > 0 && y0 < imageHeight && y0 > 0) {
acc[x0 + (y0 * imageWidth)] += 1;
}
}
}
}
}
for (int x = 0; x < imageWidth; x++) {
for (int y = 0; y < imageHeight; y++) {
if (acc[x + (y * imageWidth)] >= threshold) {
// 绘制发现的圆
drawCircle(-16776961 x y r);
System.out.println(“r=“+r);
}
}
}
}
return pixels;
}
private void setPixel(int value int xPos int yPos) {
pixels[(yPos * imageWidth) + xPos] = value;
}
// draw circle at x y
private void drawCircle(int pix int xCenter int yCenter int r) {
pix = -16776961; // 颜色值,蓝色
int x y r2;
r2 = r * r;
// 绘制圆的上下左右四个点
if (xCenter - r > 0 && yCenter - r > 0
&& xCenter + r < imageWidth
&& yCenter + r < imageHeight) {
setPixel(pix xCenter yCenter + r);
set
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 209 2014-03-29 17:10 源代码及论文\二值图像.txt
文件 3083 2014-05-14 18:24 源代码及论文\分析.txt
文件 1132392 2014-11-04 16:56 源代码及论文\基于霍夫变换的形状检测算法研究与实现.pdf
文件 1072 2014-11-04 16:56 源代码及论文\毕业论文.txt
文件 301 2014-02-07 12:07 源代码及论文\源代码\.classpath
文件 388 2014-05-21 03:56 源代码及论文\源代码\.project
文件 598 2014-02-07 12:07 源代码及论文\源代码\.settings\org.eclipse.jdt.core.prefs
文件 3424 2014-05-23 15:02 源代码及论文\源代码\bin\com\liyulin\hough\circle\AutoHoughCircle.class
文件 2918 2014-05-23 05:54 源代码及论文\源代码\bin\com\liyulin\hough\circle\HoughCircle.class
文件 3574 2014-05-23 14:58 源代码及论文\源代码\bin\com\liyulin\hough\circle\TAutoHoughCircle.class
文件 4548 2014-05-23 01:30 源代码及论文\源代码\bin\com\liyulin\hough\line\HoughLine.class
文件 5021 2014-05-25 14:26 源代码及论文\源代码\bin\com\liyulin\hough\line\THoughLine.class
文件 1166 2014-05-23 01:12 源代码及论文\源代码\bin\com\liyulin\hough\model\LineInfo.class
文件 386 2014-05-21 03:56 源代码及论文\源代码\bin\com\liyulin\hough\model\Point.class
文件 4207 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$1.class
文件 735 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$2.class
文件 1579 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$3$1.class
文件 1245 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$3.class
文件 1607 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$4$1.class
文件 1245 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$4.class
文件 1677 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$5$1.class
文件 1994 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$5.class
文件 1610 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$6$1.class
文件 1245 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$6.class
文件 1582 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$7$1.class
文件 1245 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI$7.class
文件 4944 2014-05-23 14:57 源代码及论文\源代码\bin\com\liyulin\hough\ui\HoughUI.class
文件 1386 2014-05-21 03:56 源代码及论文\源代码\bin\com\liyulin\hough\util\ImagePanel.class
文件 1999 2014-05-25 14:49 源代码及论文\源代码\bin\com\liyulin\hough\util\PixelUitl.class
文件 3931 2014-05-25 13:17 源代码及论文\源代码\bin\hough\circle\CircleHough.class
............此处省略45个文件信息
- 上一篇:Java租房管理系统
- 下一篇:模拟退火 基因算法 八皇后问题
评论
共有 条评论