2016-04-11 12:28:58 qq_20823641 阅读数 7990
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    30494 人正在学习 去看看 张中强

         经过上一篇文章的《matlab GUI图像图像基础》,我们可以知道说是入门了GUI,对于GUI图像图形还可以调用函数形成,但是对于学习图像处理来说,感觉没有那个必要去学,会了基础,就可以自己GUI图像处理功能了,主要还是算法和功能,所以我就没有写函数调用创建GUI,然后直接写了一篇关于GUI图像处理(根据matlab GUI编写),里面包括打开文件、保存文件灰度转换 、傅立叶变换 、颗粒面积的分布、 二维三维化、 图像融合几个功能,相信他们看就会明白怎么创建自己的功能,让界面更加好看,功能更加的多。完全可以自己DIY一个。

        因为回调函数的代码比较长,所以上传到资源,可以下载下来,对比添加,下载地址http://download.csdn.net/user/qq_20823641

        还是想给一张总图,一个是界面图,一个是菜单,对于控件回调函数不再这里多说了,主要的功能添加基本都在菜单和子菜单上面。

                                    

现在说一下过程

1.     看图上的坐标轴和按钮,添加三个坐标轴,2个按钮,2个可编辑文本

2.     菜单编辑上增加,如图


3.     添加各自的回调函数,会的可以参考下载的代码添加,不会的可以看上一篇学习。



2012-05-16 17:24:09 Jinhao 阅读数 2095
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    30494 人正在学习 去看看 张中强
在0.2.2版本中,Nana C++ Library提供了一个灵活配置图像处理算法的机制。对于一个抽象的算法,可能会有多种实现。例如,Nana C++ Library提供了两个图像缩放算法,他们分别是双线性插值算法(bilinear interoplation)和最邻近插值(proximal interoplation),用户可以根据不同的需求来切换算法。
参考例子:
http://stdex.sourceforge.net/help/paint/image_process_selector.htm

由于跨平台的特性,Nana并没有使用特定的平台指令来实现内部提供的算法,这些代码应该很好地工作在不同的编译器环境中。在需要考虑算法效率的特定情况下,尽管 Nana C++ Library没有提供使用平台指令的算法,但是程序员可以自己实现这样的算法,并配置以供Nana库调用。

现在我们使用MMX指令实现一个图像混合算法。
实现一个可以被Nana库使用的图像混合算法,我们必须使用class blend_interface, 这个类定义在Nana头文件<nana/paint/image_process_interface.hpp>中。

class blend_interface
{
public:
    virtual ~blend_interface() = 0;
    virtual void process(nana::paint::drawable_type dw_dst, const nana::rectangle& r_dst,
                         const paint::pixel_buffer& s_pixbuf, const nana::point& s_pos, double fade_rate) const = 0;
};

dw_dst:        目标对象.
r_dst:            目标混合区域.
s_pixbuf:      源像素缓存.
s_pos:          源坐标.
fade_rate:    混合比率.

目标混合区域总是有效的,由Nana库在计算并验证之后传入到该函数中。因此我们在使用这些数据时不必检测它们是否有效。

该算法的语义:
dw_dst = dw_dst * fade_rate + s_pixbuf *(1 - fade_rate)

现在开始!


#include <nana/paint/image_process_interface.hpp>

class blend_mmx
    : public nana::paint::image_process::blend_interface
{

    virtual void process(nana::paint::drawable_type dw_dst, const nana::rectangle& r_dst,
                         const paint::pixel_buffer& s_pixbuf, const nana::point& s_pos, double fade_rate) const
    {
        nana::paint::pixel_buffer d_pixbuf(dw_dst, r_dst.y, r_dst.height);
        nana::pixel_rgb_t * d_rgb = d_pixbuf.raw_ptr();

        if(d_rgb)
        {
            d_rgb += r_dst.x;
            nana::pixel_rgb_t * s_rgb = s_pixbuf.raw_ptr(s_pos.y) + s_pos.x;

            const unsigned rest = r_dst.width & 0x3;
            const unsigned length_align4 = r_dst.width - rest;

            unsigned d_step_width = d_pixbuf.size().width;
            unsigned s_step_width = s_pixbuf.size().width;

            unsigned i_d_rate = static_cast<unsigned>(fade_rate * 255);
            unsigned i_s_rate = 255 - i_d_rate;

            __asm
            {
                pxor xmm7, xmm7
                movd xmm0, i_d_rate
                punpcklwd xmm0, xmm0
                punpcklwd xmm0, xmm0
                punpcklwd xmm0, xmm0

                movd xmm1, i_s_rate
                punpcklwd xmm1, xmm1
                punpcklwd xmm1, xmm1
                punpcklwd xmm1, xmm1
            }

            for(unsigned line = 0; line < r_dst.height; ++line)
            {
                __asm
                {
                    push eax
                    push ebx
                    push edx
                    mov edx, dword ptr[length_align4]
                    mov    eax, dword ptr[d_rgb]
                    mov ebx, dword ptr[s_rgb]
                    lea    edx, [edx * 4 + eax]
blend_mmx_3_for_each_pixel_in_line_loop_start:
                    cmp eax, edx
                    je blend_mmx_3_for_each_pixel_in_line_loop_end

                    //eax[0], eax[1]
                    movq xmm2, qword ptr[eax]
                    movq xmm3, qword ptr[ebx]
                    punpcklbw xmm2, xmm7
                    punpcklbw xmm3, xmm7
                    pmullw xmm2, xmm0
                    pmullw xmm3, xmm1
                    paddw    xmm2, xmm3
                    psrlw    xmm2, 8
                    packuswb xmm2, xmm7
                    movq    qword ptr[eax], xmm2
                        
                    //eax[2], eax[3]
                    movq xmm2, qword ptr[eax + 8]
                    movq xmm3, qword ptr[ebx + 8]
                    punpcklbw xmm2, xmm7
                    punpcklbw xmm3, xmm7
                    pmullw xmm2, xmm0
                    pmullw xmm3, xmm1
                    paddw    xmm2, xmm3
                    psrlw    xmm2, 8
                    packuswb xmm2, xmm7
                    movq    qword ptr[eax + 8], xmm2
                        
                    add eax, 16
                    add ebx, 16

                    jmp blend_mmx_3_for_each_pixel_in_line_loop_start
blend_mmx_3_for_each_pixel_in_line_loop_end:
                    push ecx
                    mov ecx, dword ptr[rest]
                    cmp ecx, 0
                    je blend_mmx_3_for_each_rest_pixel_loop_end
blend_mmx_3_for_each_rest_pixel_loop_start:
                    movd xmm2, dword ptr[eax]
                    movd xmm3, dword ptr[ebx]
                    punpcklbw xmm2, xmm7
                    punpcklbw xmm3, xmm7
                    pmullw xmm2, xmm0
                    pmullw xmm3, xmm1
                    paddw    xmm2, xmm3
                    psrlw    xmm2, 8
                    packuswb xmm2, xmm7
                    movd    dword ptr[eax], xmm2
                    add eax, 4
                    add ebx, 4
                    loop blend_mmx_3_for_each_rest_pixel_loop_start
blend_mmx_3_for_each_rest_pixel_loop_end:
                    pop ecx
                    pop edx
                    pop ebx
                    pop eax
                }
                d_rgb += d_step_width;
                s_rgb += s_step_width;
            }

            __asm emms

            nana::rectangle r = r_dst;
            r.y = 0;
            d_pixbuf.paste(r, dw_dst, r_dst.x, r_dst.y);
        }
    }
};

应用算法


#include <nana/gui/wvl.hpp>
#include <nana/gui/timer.hpp>
#include <nana/paint/image_process_selector.hpp>

//包含我们先前定义的类blend_mmx的实现

class blend_form
    : public nana::gui::form
{
public:
    blend_form()
        :form(nana::gui::API::make_center(450, 300))
        ,fade_rate_(0.1), delta_(0.1)
    {
        this->show();

        nana::paint::image img(STR("image01.bmp"));
        s_graph_.make(img.size().width, img.size().height);
        img.paste(s_graph_, 0, 0);

        d_image_.open(STR("image02.bmp"));
        d_graph_.make(d_image_.size().width, d_image_.size().height);

        timer_.make_tick(nana::make_fun(*this, &tsform::_m_blend));
        timer_.interval(10);

        //安装blend_mmx并使用它
        nana::paint::image_process::selector sl;
        sl.add_blend<blend_mmx>("blend_mmx"); //为该算法命名
        sl.blend("blend_mmx"); //通过名字来应用它
    }
private:
    void _m_blend()
    {
        fade_rate_ += delta_;
        if(fade_rate_ > 1)
        {
            fade_rate_ = 1;
            delta_ = -0.01;
        }
        else if(fade_rate_ < 0)
        {
            fade_rate_ = 0;
            delta_ = 0.01;
        }
                
        d_image_.paste(d_graph_, 0, 0);

        //混合操作, 内部将使用blend_mmx
        s_graph_.blend(d_graph_, 0, 0, fade_rate_);

        nana::gui::drawing drawing(*this);
        drawing.clear();
        drawing.bitblt(0, 0, 450, 300, d_graph_, 0, 0);
        drawing.update();
    }
private:
    double    fade_rate_;
    double    delta_;
    timer    timer_;
    nana::paint::graphics s_graph_, d_graph_;
    nana::paint::image d_image_;
};

本文展示了一个使用外部实现的算法来替换Nana库内部算法以满足各种需求的方法。



2019-06-01 18:49:55 yaohuisong 阅读数 915
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    30494 人正在学习 去看看 张中强

数字图像处理的大作业, 通过GUI界面对图像进行一些简单的处理,有图像增强、滤波、裁剪、亮度调节、添加滤镜等功能

下面附上截图

需要的可以下载https://download.csdn.net/download/yaohuisong/11245485

 

开始
打开
储存
撤销
初始化
打印
关闭

图像类型变换
Im2bw
RGB2gray
RGB2ind 
Ind2RGB
Ind2gray    
Gray2ind
Mat2gray


图形几何运算
旋转
缩放
镜像
平移
裁剪


图像变换
二维离散傅里叶变换
二维离散余弦变换
Hough变换
Radon变换


图像添加噪声
高斯白噪声
椒盐噪声
斑点噪声
泊松噪声
用Randn函数产生噪声
生成运动模糊图像


图像复原
空域滤波复原  均值滤波复原
顺序统计滤波复原  中值滤波
自适应滤波复原

逆滤波复原
维纳滤波复原
最小二乘滤波复原
Lucy_Richardson滤波复原
盲解卷积复原


图像增强
空域变换增强
 灰度直方图
 亮度调整
 非线性变换
空域滤波增强
平滑滤波
 均值滤波器
 中值滤波器
锐化滤波
 梯度法
频域增强
 低通滤波器
 高通滤波器
 同态滤波器
彩色增强

图像分割
基于阈值分割  分水岭算法  迭代法
边缘检测  Canny边缘算子
区域生长法分割
四叉树分割
 

 

 

 

 

等等好多功能自己尝试吧!需要的可以下载!

2017-02-12 14:48:47 attilax 阅读数 570
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    30494 人正在学习 去看看 张中强

Atitit 软件项目的一整套解决方案(gui界面,中间,存储数据库,图像处理,全文搜索)attilax总结

 

1.1. 项目的常见构成模块(界面ui gui ,数据存储数据库,图像处理等) 2

1.2. 常见的界面ui模式gui cli 3

1.3. Gui的发展 native方案(swing qt winform>>xml方案(wpf javafx qml qss),私有h5》》dsl方案h5 4

1.4. 编程语言 5

1.5. 软件的运行模式:编译运行与直接源码运行(解释执行) 5

1.6. 数据库存储 6

1.7. 图像编程处理的四大金刚halcon matlab opencv photoshop 7

1.8. 全文检索 8

 


1.1. 项目的常见构成模块(界面ui gui ,数据存储数据库,图像处理等)

做出一款软件项目的常见要素有。。

依赖类库::通用的半成品软件。。代码包等。。站在巨人的肩膀上,君子善假于物也

语言::特点的环境使用特定的语言。。现在的混合编程模型是趋势,也需要混合多种编程语言来完成软件(一般一个通用语言GPL和多款DSL领域特定语言)

运行环境::一般是桌面   web 手机等,,还分为原生   h5  hybrid混合模式等。。

软件架构: cs bs web hybrid 跨架构是趋势,即是一个软件可以运行在web模式下,也可以运行在桌面gui模式,或者混合模式,一般是web优先,然后套一个本地shell

跨平台操作系统: 一般可以跨越linux win 等操作系统。。甚至安卓 ios等。。

 

 

 


1.2. 常见的界面ui模式gui cli

 

Gui模式一般俩中实现,一个基于dom模型,一个基于像素级别,性能高,但是事件模型需要自己实现,繁琐。。

普通软件大部分是属于dom模型。。一部分游戏也用像素模型,特别是比较需求性能的


1.3. Gui的发展 native方案(swing qt winform>>xml方案(wpf javafx qml qss),私有h5》》dsl方案h5

 

效果图

 

native方案大概如图

 JButton btn2=new JButton();  btn.setText("按钮文字")

 

native方案的缺点,受限于通用语言的语法限制,语法噪音太多,啰嗦,可读性较差。。面对嵌套层次结构界面设计可读性很差

 

 

xml方案,比如javafx fxml方案。。

<Buttonfx text="按钮文字" />   

可以看到简洁很多了,解决了可读性问题,语法噪音问题,层次结构问题。但是,私有的,不是标准化的。。

第三阶段,H5阶段(html5

<button  >按钮文字</button>标准化的问题。。

主要解决了标准化的问题。。至此阶段,gui 界面方面的dsl已经发展比较好了。。

 


1.4. 编程语言 

编程语言分类:命令式java c# js,函数式sql , 逻辑式语言等。。

 

按照是否编译,可以分为编译型语言和脚本语言。。脚本语言一般更加简化。。

按照通用与专用,可分为GPL 通用语言 Generalized Programming Language 通用编程语言dsl领域特定语言

按照代际划分,有一代汇编类,二代native本地编译语言(c c++),三代vm类型语言(java c# ) ,脚本语言也有时称为三代半语言,常用的js py php4gl一般就是dsl,常用的dslh5(html) sql等。。

 

 

编程语言的发展 从机器语言,汇编语言到本地native语言(c c++) vm语言(java  c#) 再到脚本语言(js php python) 再到dsl

语言层次越高,可读性一般越好,可移植性越好,不过性能也越差了。。当然如果使用同样的类库的话,只是写点胶水代码的话,差别到是相对来说不大了。

 

机器语言, 可以说彻底淘汰,唯一的优点就是性能,其他基本全是缺点。。

汇编语言,貌似也基本淘汰,比起机器语言,提升了很大的可读性。。

native语言(c c++) 相对汇编语言可读性又大幅提升,性能方面不如汇编,但比vm语言要高。。。缺点是开发效率,以及可移植性仍然需要提升。。很多图像库貌似都是使用此开发。。依赖于性能的应用大有所为。

vm语言(java  c#)  改进了native语言的问题,增加一个vm层隔离开了os。目前的业界高层应用开发主力

脚本语言 带来更高的生产力。但目前ide的问题,大型复杂企业级开发还难当重任,目前貌似在轻复杂度代码领域比较大发展。

Dsl语言 ,领域特定语言。。比如H5做界面。。Sql做数据库查询。Matlab halcon使用的语言,用来做图像处理。。

更高的开发效率,特别对于特定领域,图像处理,界面,数据库查询等大有优势。。正则表达式,用来文本搜索等。

Dsl语言本身性能很差,但是它是调用类库的,类库使用底层语言书写的,所以对性能不影响。

 

 

1.5. 软件的运行模式:编译运行与直接源码运行(解释执行)


1.6. 数据库存储

数据库相当于一个高级的excel。。。

 

表头定义

 

 

数据显示与维护

 

 


1.7. 图像编程处理的四大金刚halcon matlab opencv photoshop

 

图像方面的编程处理也是非常的与广泛了,比如人脸识别,指纹识别,二维码扫描等,条码,拍照识别等。。

 

opencv

 编辑

OpenCV全称是:Open Source Computer Vision LibraryOpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库

halcon 

 

HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境

MATLAB是美国MathWorks公司出品的商业数学与图像处理软件,

 

Photoshop::知名的图像处理软件了。。公开只提供gui接口。。用来测试,调试,验证一些图像处理的很有用。。直接通过gui接口调用ps也是某些情况下的很好选择。。

 

当然一些非常频繁的图像处理都已经有成熟的类库,算法库等,可以直接几行代码调用,较为方便的集成到自己的软件当中。。

 


1.8. 全文检索

全文检索一般处理文章搜索的大量文字搜索,数据库默认的like搜索对这种大文字搜索性能很差。。。。

 

搜索主要分俩中一种是遍历搜索,扫描一遍。。小数据量下还可,大数据量当然就不行了

一种是索引搜索,就是做个目录,类似与分类,书籍目录,可以快速定位到需要的数据。。。

 

索引的实质,即是分类处理,就像我们数据的目录编排一样。。。

 

 

 

2020-01-13 15:39:19 Dummy_ 阅读数 47
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    30494 人正在学习 去看看 张中强

前些时间博主写了一个Python的图像去雾算法系统,准备发出来,结果因为许多事情耽误了,今天补上。

(本人才疏学浅,多有不正之处,欢迎各位大牛批评改正。)

系统分析

本系统主要是结合了Python的GUI,基于暗通道的图像去雾,基于色阶调整的图像去雾,图像增强算法,同时含有一些保存功能、图像查看等等,话不多说,给大家看看成果。

系统界面

1.图像主界面
主界面
2.文件功能
在这里插入图片描述
3.图像处理功能
在这里插入图片描述
4.图像查看功能
在这里插入图片描述
5.帮助功能
在这里插入图片描述

系统测试

1.打开图像
在这里插入图片描述
2.图像增强
在这里插入图片描述
3.色阶调整去雾
在这里插入图片描述
4.图像增强后暗通道去雾
在这里插入图片描述
5.查看增强图像
在这里插入图片描述
6.查看增强后暗通道去雾
在这里插入图片描述
7.查看未经过去雾处理的去雾图像
在这里插入图片描述
(这里的提示框应该改成“未处理”)

大概就这些了,大家有建议希望评论区留下来,或者加本人qq:2268323760

MatlabGUI使用

阅读数 891

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