private void analyzeImage(BufferedImage image) {
		setProgress("Analyzing...");
		worker = new PatchFinder(
				image, 
				controller.getParametersBean().getTolerance(), 
				40 // TODO parameter
		);
		worker.addPropertyChangeListener(new PropertyChangeListener() {
			@Override
			public void propertyChange(PropertyChangeEvent evt) {
				if ( evt.getPropertyName().equals("progress") ) {
					setProgress(
						"Analyzing: "+(double)Math.round((double)evt.getNewValue()*10000)/100+"%",
						(double)evt.getNewValue()
					);
				}
				if ( evt.getPropertyName().equals("done") && (boolean)evt.getNewValue() ) {
					try {
						sortPatches(worker.get());
					} catch (InterruptedException e) {
						controller.getImageBean().setStatus(ImageBean.LOADED);
					} catch (ExecutionException e) {
						e.printStackTrace();
					}
				}
			}

		});
		worker.execute();
	}