2016-09-09 00:53:31 lpsl1882 阅读数 2540
  • Qt项目实战之网络电子白板

    本课程使用Qt技术实现了网络电子白板,支持直线、矩形、椭圆、三角形、涂鸦等图形元素。本课程实现的电子白板,可以在多人之间共享,每个人都可以进行任意绘制,每个人的绘制都可以同步显示在其它人的白板上。服务器端使用Qt Network开发,客户端使用Qt Network和Qt Graphics View Framework开发,数据传输使用JSON数据格式。

    11506 人正在学习 去看看 安晓辉

  图像处理分析过程中,检测特定的形状是重要的一步。霍夫变换(Hough)通过转换坐标系,将特定形状的检测映射到参数空间中,从而根据参数空间中的值来确定特定形状的相关信息。
  Hough变换的比较简单的应用例子有检测直线和检测圆。

检测直线

  设空间中有若干点,我们要判断这些点是否能构成一条直线,即为直线检测。平面中直线的通用公式为xcos(θ)+ysin(θ)=ρ。常用的y=wx+b公式,因为不能兼容y=b的情况,所以不能使用。对于某个点,其坐标是(xi,yi),过该点的直线有无数条,这些直线统一表示为xicos(θ)+yisin(θ)=ρ,其中xi,yi是常量。反过来看,代表这些直线的公式,可以看做θ为自变量,ρ为因变量,xi,yi为常量参数的直线公式。这样,在x-y空间过(xi,yi)的无数条直线,可以在θρ空间中用一条线代表。见下图:
  这里写图片描述
  这里写图片描述
  上图是x-y空间,下图是θρ空间。其中红、绿、蓝三条线可以汇聚成一个点,说明这三条线对应的点,其在θρ空间中的直线参数是一样的。反过来就是说,穿过这三个点的无数直线中,有“三”条直线,其θ,ρ值相同,这“三“条直线是一根直线,即这三个点可以共线。
  

检测圆

  设空间有若干点,我们要判断这些点是否能构成一个圆的轮廓,即为圆检测。圆的表达式为(xx)2+(yy)2=R,参数有x,y,R。这说明,圆对应的映射空间是三维的,即xyR空间。x,y都表示空间,因此我们可以暂时将R设为常量,构建xy空间,令x’为自变量,y’为因变量,作图如下:
  这里写图片描述
  这里写图片描述
  上图是x-y空间,下图是x’-y’空间。图中绘制了一个圆和一个矩形,其中圆的轮廓并不是完全规则的。经过Hough变换后,圆上的点的变换曲线基本汇聚在一起,而矩形上的点则不能汇聚,这样就检测到圆。由于我们获取的图像并不一定是规则图形,其在参数空间中不一定能汇聚到一个点,而是在一个区域中汇聚起来,为了容许这类误差,我们可以用窗来检测参数空间中的曲线汇聚区域,而不是找曲线汇聚点,以此来检测不完全规则的特定形状。
  如果我们不知道R的值,那么我们就需要给定R取值的离散区间[R1,R2...Rn],取该区间中的值,重复做n次Hough变换检测。这样的话工作量会非常大,为了提升效率,往往会借助图像中的其他特征。
  另外,我们可以看出,由于不知道圆的尺度,我们不得不重复做多次检测。在实际的形状检测工作中,我们并不知道需要检测的复杂形状,经过了何种平移、缩放、旋转甚至是扭曲,因此需要引入不变性特征,或者针对所有可能的平移、缩放、旋转变换情况,统统做一遍检测。物体检测跟踪需要相当多的计算量。据了解,人脑为了进行视觉模式识别,至少消耗了一半的神经资源,所以人可以闭目养神,却不能捂耳朵、捏住鼻子养神:)

2017-01-24 17:44:11 oHanTanYanYing 阅读数 4357
  • Qt项目实战之网络电子白板

    本课程使用Qt技术实现了网络电子白板,支持直线、矩形、椭圆、三角形、涂鸦等图形元素。本课程实现的电子白板,可以在多人之间共享,每个人都可以进行任意绘制,每个人的绘制都可以同步显示在其它人的白板上。服务器端使用Qt Network开发,客户端使用Qt Network和Qt Graphics View Framework开发,数据传输使用JSON数据格式。

    11506 人正在学习 去看看 安晓辉

有时做图像处理,会遇到图像中大部分信息是冗余的情况,以下图为例:
这里写图片描述
假设图中黑色部分才是我们需要研究的对象,则外围的一堆白色是我们希望去掉的,这个时候用最小外接矩形来框住黑色部分,进而截取该部分的信息而忽略掉其他的信息变得实用。
下面,就给出查找图像轮廓中最小外接矩形的代码,后面有空再给出在图像中截取外接矩形的部分成为新图像的代码。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;

void fineMinAreaRect(Mat &threshold_output)
{
    vector<vector<Point>> contours;
    vector<Vec4i> hierarchy;
    //寻找轮廓
    findContours(threshold_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
    //对每个找到的轮廓创建可倾斜的边界框
    vector<RotatedRect> minRect(contours.size());
    for (int i = 0; i < contours.size(); i++)
    {
        minRect[i] = minAreaRect(Mat(contours[i]));
    }
    //绘出轮廓及其可倾斜的边界框
    Mat drawing = Mat::zeros(threshold_output.size(), CV_8UC3);
    for (int i = 0; i< contours.size(); i++)
    {
        Scalar color = Scalar(255, 255, 255);
        //绘制轮廓
        drawContours(drawing, contours, i, color, 1, 8, vector<Vec4i>(), 0, Point());
        Point2f rect_points[4]; minRect[i].points(rect_points);
        for (int j = 0; j < 4; j++)
            line(drawing, rect_points[j], rect_points[(j + 1) % 4], color, 1, 8);
    }
    //结果在窗体中显示
    imshow("Contours", drawing);
}

int main()
{
    Mat src;
    Mat src_gray;
    /// 加载源图像
    src = imread("..\\..\\示例图片\\1.bmp");
    /// 转为灰度图并二值化
    cvtColor(src, src_gray, CV_BGR2GRAY);
    threshold(src_gray, src_gray, 170, 255, CV_THRESH_BINARY);
    /// 最小外接矩形
    fineMinAreaRect(src_gray);
    ///显示结果
    imshow("Source", src);
    waitKey(0);
    return(0);
}

实现结果如下:
这里写图片描述

2019-05-19 21:27:23 qq_41879767 阅读数 133
  • Qt项目实战之网络电子白板

    本课程使用Qt技术实现了网络电子白板,支持直线、矩形、椭圆、三角形、涂鸦等图形元素。本课程实现的电子白板,可以在多人之间共享,每个人都可以进行任意绘制,每个人的绘制都可以同步显示在其它人的白板上。服务器端使用Qt Network开发,客户端使用Qt Network和Qt Graphics View Framework开发,数据传输使用JSON数据格式。

    11506 人正在学习 去看看 安晓辉
	关于图像处理的最近邻差值算法主要用于图像的放大和缩小处理,但这种算法具有放大缩小易出现失				
	真现象,不具有普适性,且可以说是图像处理的初级操作。
    针对m×n的图像,我们如果想要对它实现p×q的格式操作,我们通过对图像像素的某个点进行处理即可。
    首先我们需要用zeros创建p×q的矩阵空间来作为目标图像的显示。
    我们可以把源图像和目标图像理解为一个小矩形,具有宽度和高度。
    那么这两个图像在x和y方向上存在着比例放大的关系,而我们恰恰是利用这种比例放大的关系来实现              
    图像矩阵的转换。
    我们设定水平方向的增量为d1 = m/p,垂直方向的增量为d2 = n/q;
    那么我们在代码中只需要对数组下标进行操作即可。
    这里需要说明,在图像中从MATLAB中读取进来的格式可能是M*N*P的行列页形式,那么这种情况,可以
    将页分割开来,利用一般的矩阵操作,然后对每一页中的二维数组进行处理,实现该页元素的叠加,最后将这三页相加即可还原为原图的效果。或者不对页分割直接处理。
%%最近邻插值算法
function   zuijinlin(I,t1,t2)
%t1为宽度,t2为高度,y是目标图像
    [m,n,k1] = size(I);
    d1 = m/t1;
    d2 = n/t2;
    %I = im2double(I);
    y = zeros(t1,t2,k1);
    for k = 1:k1
        for i = 1:m
            for j = 1:n
            y(ceil(i*d1),ceil(j*d2),k) = I(i,j,k);   
             y = im2uint8(y);
            end
        end
    end
    figure(1);
%   I = im2uint8(I);
    imshow(I);
    title('原图');
    figure(2);
    imshow(y);
    title('最近邻插值算法处理');
    
2017-01-22 22:31:34 samylee 阅读数 1480
  • Qt项目实战之网络电子白板

    本课程使用Qt技术实现了网络电子白板,支持直线、矩形、椭圆、三角形、涂鸦等图形元素。本课程实现的电子白板,可以在多人之间共享,每个人都可以进行任意绘制,每个人的绘制都可以同步显示在其它人的白板上。服务器端使用Qt Network开发,客户端使用Qt Network和Qt Graphics View Framework开发,数据传输使用JSON数据格式。

    11506 人正在学习 去看看 安晓辉

为满足图像处理要求,博主写此简易代码有如下作用:

1、根据感兴趣区域做深度学习标签;

2、提取感兴趣区域进行目标跟踪;

3、对感兴趣区域进行进一步操作。


具体代码如下:

//Author: samylee
//Contact email: ahuljx@126.com
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <stdio.h>  

using namespace cv;

Mat org, dst, img, tmp;

void on_mouse(int event, int x, int y, int flags, void *ustc)
{
	static Point pre_pt = (-1, -1);
	static Point cur_pt = (-1, -1);
	if (event == CV_EVENT_LBUTTONDOWN)
	{
		org.copyTo(img); 
		pre_pt = Point(x, y);
	}
	else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))//摁下左键,flags为1 
	{
		img.copyTo(tmp);
		cur_pt = Point(x, y);
		rectangle(tmp, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
		imshow("img", tmp);
	}
	else if (event == CV_EVENT_LBUTTONUP) 
	{
		org.copyTo(img);
		cur_pt = Point(x, y);
		rectangle(img, pre_pt, cur_pt, Scalar(0, 255, 0, 0), 1, 8, 0);
		imshow("img", img);
		img.copyTo(tmp);
		int width = abs(pre_pt.x - cur_pt.x);
		int height = abs(pre_pt.y - cur_pt.y);
		if (width == 0 || height == 0)
		{
			return;
		}
		dst = org(Rect(min(cur_pt.x, pre_pt.x), min(cur_pt.y, pre_pt.y), width, height));
		namedWindow("dst");
		imshow("dst", dst);
	}
}
void main()
{
	org = imread("desktop.jpg");
	org.copyTo(img);
	namedWindow("img");
	setMouseCallback("img", on_mouse, 0); 
	imshow("img", img);
	waitKey(0);
}


效果图如下:

处理前:


处理后:



任何问题请加唯一QQ2258205918(名称samylee)!


2016-04-29 01:11:20 loukey_671 阅读数 2094
  • Qt项目实战之网络电子白板

    本课程使用Qt技术实现了网络电子白板,支持直线、矩形、椭圆、三角形、涂鸦等图形元素。本课程实现的电子白板,可以在多人之间共享,每个人都可以进行任意绘制,每个人的绘制都可以同步显示在其它人的白板上。服务器端使用Qt Network开发,客户端使用Qt Network和Qt Graphics View Framework开发,数据传输使用JSON数据格式。

    11506 人正在学习 去看看 安晓辉

Vtk图像处理

 

1、数字图像文件内容由2个部分组成,图像头信息和数据。其中头信息包含了origin(起点)、space(图像间隔)、dimension(维数),图像数据即为图像像素的像素值,包括了灰度、矢量和张量。 其中灰度用unsignedchar来表示,

2、创建图像的source类,vtkImageCanvasSource2D,FillBox设置矩形,SetDrawColor设置颜色。

       VtkImageEllipsoidSource:根据指定中心以及各个轴的半径来生成一个前景为椭圆形的二值图像。

       VtkImageGaussianSource:生成一副像素值服从高斯分布的图像。

       VtkImageGridSource:用于生成网格线图像。

       VtkImageNoiseSource:生成一个像素值为随机数的噪声图像。

       VtkImageSinusoidSource:生成的图像由正弦函数决定。

3、现在利用vtkImageViewer类来显示图像。先用其建立vtkAcor,vtkRender,vtkRenderWindow,vtkInteratorStypeImage的管线连接。再设置ColorLevel(窗位),ColorWindow(窗宽),Slice(切片索引),Orientation(切片方向)

4、ColorWindow和ColorLever,其中ColorWindow为显示的灰度大小,ColorLever显示的是中心灰度的位置。

5、Slice(切片):分为3种,SagitalPlane(矢状面),CoronalPlane(冠状面),Transverse/AxialPlane(横断截面),

6、图像融合:vtkImageBlend,SetInput表示输入的图像,SetOpacity表示设置模糊度

7、图像类型转换:

       vtkImageCast:可以讲图像算子转换成float或者double类型

       vtkImageShiftscale:可以指定偏移和比例参数来对输入图像数据进行操作。

       VtkImageLuminance:将一个RGB彩色图像转换为一个单组分的灰度图像。

       VtkImageExtractComponets:提取彩色图像的各个颜色组分。

       vtkImageAppendComponents:用来合成彩色图像

8、提取感兴趣区域:

       vtkExtractVOI:输入输出都是vtkImageData,voidSetVOI()可以输入5个参数,分别代表了3为坐标各个方位的最大值和最小值。

       VtkImageReslice:对于任意切面的提取,vtk中鼠标消息是在交互器样式(InteractorStyle),因此通过为交互器样式添加(Observer)来监听相应的消息。当消息触发时,由命令模式执行相应的回调函数。P101有详细调用代码

9、vtkImageAccumulate:用于实现直方图统计功能,输入输出都是vtkImageData类型,

10、vtkImageMagnify:用于实现图像的升采样

11、vtk的图像运算,数学运算,逻辑运算,

12、vtkImageThreshold:图像二值化,设置一个阈值,高于阈值设置成前景,低于阈值设置成背景。还可以设置成3部分阈值,

13、边缘检测:vtkImageGradient类可以计算图像梯度,利用梯度算子分割。

       Canny算子/拉普拉斯算子

14、均值滤波:vtk中没有直接进行均值滤波的,只有先通过图像卷积后来实现均值滤波,vtkImageConvolve:需要两个输入,一个是需要进行卷积的图像,另一个是卷积模块数组。

15、高斯平滑:vtkImageGaussianSmooth来实现图像的高斯平滑

16、中值滤波:vtkImageHybridMedian2D来实现二维图像的中值滤波

17、各向异性滤波:vtkImageAnisotropicDiffusion2D(3D)来进行二维和三维图像的各向异性扩散滤波

18、频域处理:快速傅立叶变换,

19、低通滤波:1、理想低通滤波器vtkImageIdeaLowPassp128

                       2、巴特沃斯低通滤波器:vtkImageButterworthowPass

       高通滤波:1、理想高通滤波器vtkImageIdeaHighPass

                      2、巴特沃斯高通滤波器:vtkImageButterworthHighPass

 

所有图像处理方法应用在不同的领域。

MATLAB图像处理工具箱

阅读数 11559

没有更多推荐了,返回首页